MSW intercepts network requests at the network level, making it perfect for testing.
Installation
bashnpm install -D msw
Setup Handlers
typescript// mocks/handlers.ts import { http, HttpResponse } from 'msw'; export const handlers = [ http.get('/api/users', () => { return HttpResponse.json([ { id: 1, name: 'John' }, { id: 2, name: 'Jane' }, ]); }), http.post('/api/users', async ({ request }) => { const data = await request.json(); return HttpResponse.json({ id: 3, ...data }, { status: 201 }); }), ];
Setup Server for Tests
typescript// mocks/server.ts import { setupServer } from 'msw/node'; import { handlers } from './handlers'; export const server = setupServer(...handlers);
typescript// jest.setup.js import { server } from './mocks/server'; beforeAll(() => server.listen()); afterEach(() => server.resetHandlers()); afterAll(() => server.close());
Now all fetch requests in your tests will be intercepted!