blog
MSW(Mock Service Worker) 세팅 방법
Front-end / Testing#MSW#Mocking#Vue#React
백엔드 API가 준비되기 전에 프론트엔드 개발을 진행하기 위해 MSW를 세팅하는 과정이다. MSW v2 API 기준이다.
1. 설치
npm i -D msw
2. 폴더 구조
src/
└─ mocks/
├─ browser.ts
└─ handler.ts
3. browser.ts
import { setupWorker } from 'msw/browser';
import { handlers } from './handler';
export const worker = setupWorker(...handlers);
4. handler.ts
가로챌 요청 URL과 돌려줄 응답을 정의한다.
import { http, HttpResponse } from 'msw';
export const handlers = [
http.post('MY_URL', async () => {
return HttpResponse.json({
code: 0,
message: '성공',
data: {
fail: 0,
total: 1,
success: 1,
records: [
{
sectionId: generateRandomId(),
tel: generateRandomPhoneNumber(),
userNm: generateRandomUserName(),
result: 'Success',
id: generateRandomId(),
},
],
},
});
}),
];
5. worker 스크립트 생성
public/에 mockServiceWorker.js를 만든다.
npx msw init public/
6. service worker 등록
개발 환경에서만 worker를 시작하고, 시작이 끝난 뒤 앱을 마운트한다.
Vue:
// main.ts
async function enableMocking() {
if (process.env.NODE_ENV !== 'development') return;
const { worker } = await import('./mocks/browser');
return worker.start();
}
const app = createApp(App);
enableMocking().then(() => {
// app.use(...)
app.mount('#app');
});
React:
// main.tsx
async function enableMocking() {
if (process.env.NODE_ENV !== 'development') return;
const { worker } = await import('./mocks/browser');
return worker.start();
}
enableMocking().then(() => {
ReactDOM.createRoot(document.getElementById('root')!).render(<App />);
});