โค๏ธโ๐ฅMSW ์๊ฐ
MSW(mocking service worker)๋ API๋ฅผ mockingํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋๋ค.
mocking์ ์ฅ์
- ํ ์คํธ ์ฝ๋์ ์์กด์ฑ์ ๋์ด๋ด ๋ ๋ฆฝ์ ์ธ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ์ค์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ธฐ ๋๋ฌธ์, ์๋ ์ธก๋ฉด์์ ๋น์ฉ์ ๊ฐ์ด ๋ ์ ์์ต๋๋ค.
โ๏ธMSW๋ฅผ React์์ ์ฌ์ฉํด๋ณด์.
์ฐ์ msw๋ฅผ ์ค์นํด์ค๋๋ค.
npm install msw@latest --save-dev
๊ทธ ๋ค์ msw๋ฅผ ์คํํด์ค์๋ค.
npx msw init public/ --save
"msw": { "workerDirectory": [ "public" ] }
์ด ๊ฒฐ๊ณผ๋ก package.json์ ๋ค์๊ณผ ๊ฐ์ ์คํฌ๋ฆฝํธ๊ฐ ์ถ๊ฐ๋ฉ๋๋ค.
์ธํ ์ด ์๋ฃ๋์์ต๋๋ค. ์ด์ mocking ๋ชจ๋์ ๋ง๋ค์ด ์ค๋๋ค.
ํ์ผ ๋๋ ํ ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.src/mocks โโโ browser.ts โโโ dummy.json โโโ handlers.ts
์ ๋ dummy.json์ด๋ผ๋ ํ์ผ์ ๋ง๋ค์ด ์ฌ์ฉํ์์ต๋๋ค.
// src/mocks/handlers.ts import { HttpResponse, http } from "msw"; import dummy from "./dummy.json"; export const handlers = [ http.get("/dummy", () => { return HttpResponse.json(dummy); }), ];
// src/mocks/dummy.json [ { "id": "1", "name": "kim" }, { "id": "2", "name": "lee" }, { "id": "3", "name": "park" } ]
// src/mocks/browser.ts import { setupWorker } from "msw/browser"; import { handlers } from "./handlers"; export const worker = setupWorker(...handlers);
React์ main.tsx๋ฅผ ์์ ํด์ค์๋ค. dev๋ชจ๋ ์์๋ง mocking์ ์ฌ์ฉํ๋๋ก ํ๋ ์ฝ๋์ ๋๋ค.
// main.tsx import React from "react"; import ReactDOM from "react-dom/client"; import App from "./App.tsx"; async function enableMocking() { if (process.env.NODE_ENV !== "development") { return; } const { worker } = await import("./mocks/browser"); //Dynamic importํ๋ ๊ฒ์ด ๋์ ๋์๋ค. return worker.start(); } enableMocking().then(() => { ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( <React.StrictMode> <App /> </React.StrictMode> ); });
โ๏ธ์์ฝ
- msw๋ชจ๋์ ์ค์นํ๊ณ handler๋ฅผ ๋ง๋ค์ด ์ค๋ค.
- ์ด ํธ๋ค๋ฌ๋ msw/browser๋ชจ๋์ ์๋ setupWorker์ start๋ฉ์๋๋ฅผ ํตํด์ ์คํ์์ผ ์ค๋ค.
- ์คํํ๋ค๋ฉด ํด๋น ์์ฒญ์ mocking์ด ๋๋ค.
'Front End > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React-query] refetch์ invalidate์ ์ฐจ์ด (0) | 2024.06.07 |
---|---|
[React] Context๋ฅผ ์์๋ณด์. (0) | 2024.04.30 |
์ต์ ๋ฒ ํจํด(Observer Pattern)๊ณผ React Query (1) | 2024.04.08 |
React-query, SWR์ ์ฌ์ฉํด์ผํ๋ ์ด์ . ์๊ฒฉ ๋ชจ๋ (0) | 2024.01.15 |
[React] React Query์ SWR์ ์ฐจ์ด? (0) | 2023.11.29 |