๋ฌธ์ ์ํฉ
msw๋ฅผ ์
๊ทธ๋ ์ด๋ ํ๋ค (ํ๋ก์ ํธ ๋ด๋ถ์์ ๊ธฐ์กด msw 1.xx ๋ฒ์ ์ 2.31๋ก ์
๊ทธ๋ ์ด๋ํจ)
Migration guideline ์ ๋ฐ๋ผ ์ฝ๋ migration์ ํ๋๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์คํํ๋ msw์ ๋ชจํนAPI์ ์๋ต์ด ์๊พธ 404 (Not Found)๊ฐ ๋จ์ด์ก๋ค. ๊ทธ๋์ ํ์ด์ง๊ฐ ์์ ์๋จ๋ ๋ฌธ์ ๊ฐ ์์๋ค.
๋๋ฒ๊น
ํ์ด์ง๊ฐ ๋ ๋๋ง๋๋ฉด์ api๋ฅผ ํธ์ถํ์ง ์๊ณ ์ฌ์ฉ์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ผ์ง๋ง api๊ฐ ํธ์ถ๋๋ ํ์ด์ง๋ค์ ์ ์์ ์ผ๋ก msw์ mocking ์๋ต์ ์ ์ฃผ์๋ค.
๋ฌธ์ ๋ ํ์ด์ง๋ฅผ ๋์ฐ๋ฉด์ ๋ฐ๋ก api๋ฅผ ํธ์ถํ๋ ํ์ด์ง์์๋ง ํด๋น 404 ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
https://mswjs.io/docs/getting-started#step-2-describe
์์ ๊ณต์๋ฌธ์๋๋ก install๋ ์ ๋์ด์๊ณ , ํธ๋ค๋ฌ๋ ์ ์์ฑํ๋ค.
mocks>handlers>index.ts
async function initMocks() {
const { worker } = await import('./browser');
worker.start();
}
export default initMocks;
๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ๋คํธ์ํฌ ์์ฒญ์ ๊ฐ๋ก์ฑ ์ ์๊ฒ ์ค์
src>main.tsx
if (import.meta.env.MODE === 'development') {
await initMocks();
}
createRoot(document.getElementById('root') as Element).render(
<React.StrictMode>
<App />
</React.StrictMode>,
๊ฐ๋ฐ๋ชจ๋์์๋ง ํ์ฑํ๋๋๋ก ์๋น์ค์์ปค๋ฅผ ํธ์ถ
์ ์ํ๋ก ๋ค๋ฅธ ๋ถ๋ถ์ ๋ํ ๋๋ฒ๊น ์ ๊ฑฐ์ ๋ฉฐ์น ๋์? ํ๋๋ฐ .. ํด๊ฒฐ๋๋๊ฒ ์์๋ค.
console์ [MSW] mocking enabled์ด ๊ฐ์ฅ ๋จผ์ ์ฐํ๋๊ฑธ ๋ด์๋ ์์ปค ์คํ์ด ๊ฐ์ฅ ๋จผ์ ์ ๋๋๋ฐ ์ ๋ชจํน api ์์ฒญ์์ ๊ณ์ ์๋ฌ๊ฐ ๋๋ ๊ฒ์ธ์ง...
ํด๊ฒฐ
๋ต์ ๊ณต์๋ฌธ์์ ์์๋ค.
https://mswjs.io/docs/integrations/browser#conditionally-enable-mocking
์๋น์ค์์ปค๋ฅผ ํธ์ถํ๊ธฐ ์ํด ์ฐ๋ `worker.start()` ์ฝ๋๋ ์๋น์ค์์ปค๊ฐ ์์ฒญ์ ๊ฐ๋ก์ฑ ์ค๋น๊ฐ ์๋ฃ๋๋ฉด ํ๋ผ๋ฏธ์ค๋ฅผ ๋ฐํํ๋ค.
๋ฐ๋ผ์ ์ฑ์ ๋ ๋๋ง์ด ์ผ์ด๋๊ธฐ ์ ๊น์ง `worker.start()`์ ํ๋ผ๋ฏธ์ค๋ฅผ await๋ก ํ๋ผ๋ฏธ์ค๊ฐ ์ฒ๋ฆฌ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋๋ก ํ๋ค. ๋ค์๋งํด ๋ฑ๋กํ ํ๋ผ๋ฏธ์ค๊ฐ ๋ฆฌ์กธ๋ธ๋ ๋๊น์ง ์ฑ์ ๋ ๋๋ง์ ์ง์ฐ์ํค๋ ๊ฑฐ๋ค.
์๋๋ฉด ์๋น์ค์์ปค๋ฅผ ๋ฑ๋กํ๋ ๋ก์ง์ ๋น๋๊ธฐ๋ผ์ await๋ก ํ๋ผ๋ฏธ์ค๋ฅผ ๋ฆฌ์กธ๋นํ๋๊ฑธ ์คํจํ๊ฒ๋๋ฉด, ์๋น์ค์์ปค์ ๋ฑ๋ก๊ณผ ์ฑ์์ ์ด๊ธฐ์ api๋ฅผ ์์ฒญํ๋ ๋ก์ง์ด race condition ๊ฒฝ์ ์ํ๋ก ๋์์ ์ผ์ด๋ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฒฐ๊ตญ ์์ ๊ธฐ์กด ์ฝ๋๋ ์๋น์ค์์ปค๋ฅผ ๋ฑ๋กํ ์ฝ๋์ ์ฑ์ ์คํ์ด ๋์์ ์ผ์ด๋๋ฉด์๋ฌ๋ ๋ฌธ์ ๋ก ํ์ ๋์๋ค.
์๋์ ๊ฐ์ด ์๋น์ค ์์ปค๋ฅผ ํธ์ถํ๋๋ก ์ง๋์ ํจ์ ๋ด๋ถ์ worker.start() ์ฝ๋ ์์ฒด์ await ํค์๋๋ฅผ ๋ฃ์ด์ฃผ๋ ์ด์ด์๊ฒ๋ ๋ฐ๋ก ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋ค.
async function initMocks() {
const { worker } = await import('./browser');
await worker.start(); //<--- await ์ถ๊ฐ
}
export default initMocks;
Additional Ref
https://www.techtarget.com/searchstorage/definition/race-condition