用途:MSW 在网络层做 API 模拟,可在不修改应用代码的情况下拦截 HTTP、GraphQL、Server-Sent Events(sse)与 WebSocket(ws)流量,适用于测试、Storybook 与本地开发。测试 React、Vue、Node 的 API 集成推荐使用 MSW;纯函数单测用普通测试替身;真实 API 的 E2E 用 Playwright/Cypress 网络拦截;模块内部模拟用 vi.mock()/jest.mock()。
主要能力:从 msw 导入 http、HttpResponse、graphql、sse、ws、delay、bypass、passthrough;测试与 SSR 用 msw/node 的 setupServer,Storybook 与开发用 msw/browser 的 setupWorker,React Native 用 msw/native。用 http.get('/api/user/:id', async ({ request, params, cookies }) => HttpResponse.json(...)) 定义处理器;测试中按 beforeAll 里 server.listen({ onUnhandledRequest: 'error' })、afterEach 里 server.resetHandlers()、afterAll 里 server.close() 管理生命周期;用例内可用 server.use() 覆盖,并发用例用 server.boundary() 隔离。响应可用 HttpResponse.json/text/html/xml/formData/arrayBuffer 构造,网络错误用 HttpResponse.error();SSE 用 sse(),分块用 ReadableStream。
限制与注意:v2 已移除 rest 命名空间、res(ctx.*) 响应组合与 (req, res, ctx) 解析器签名,不要沿用 v1 记忆。查询参数不写进 URL 谓词,否则会过度匹配路径;请求体读取是异步的,需 await request.json();生命周期事件中读体前先克隆请求;HttpResponse 才能保留 Set-Cookie;delay() 与 delay('real') 在 Node.js 无可观察延迟,应使用明确毫秒;bypass() 会发起新请求,passthrough() 则放行原请求。
其他:详细规则见 handler-api.md、response-api.md、server-api.md、test-patterns.md、migration-v1-to-v2.md、anti-patterns.md。