You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jest配合MSW测试React组件时fetch响应JSON解析错误如何解决?

问题根源

你同时启用了jest-mock-fetch和MSW,两者存在功能冲突:

  • jest-mock-fetch会覆盖全局原生fetch实现,默认返回空响应体
  • MSW只能拦截原生的fetch/XMLHttpRequest请求,被jest-mock-fetch篡改后的请求无法被MSW捕获处理,因此你拿到的是空body的200响应,解析JSON时自然抛出"Unexpected end of JSON input"错误

解决方法

  • 优先移除jest-mock-fetch依赖,MSW本身就已经实现了接口拦截的能力,不需要额外的fetch mock工具配合使用,移除后即可正常捕获请求返回你配置的JSON数据
  • 检查MSW的测试生命周期配置是否完整,确保你在测试框架的生命周期钩子中添加了以下配置:
// 测试启动前开启MSW服务
beforeAll(() => server.listen())
// 单条测试结束后重置拦截规则
afterEach(() => server.resetHandlers())
// 所有测试结束后关闭MSW服务
afterAll(() => server.close())
  • 不要用act包裹组件渲染逻辑,React Testing Library的render方法已经内置了act处理。对于异步接口返回后的状态断言,使用waitFor或者findBy前缀的查询方法等待异步状态更新即可,示例:
test('校验用户投票状态', async () => {
  render(<VoteButton />)
  // 等待接口返回后状态更新
  expect(await screen.findByText('你已参与投票')).toBeInTheDocument()
})
  • 如果你需要保留jest-mock-fetch用于其他测试场景,可在当前测试文件顶部恢复原生fetch实现:
global.fetch = jest.requireActual('node-fetch')

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:36:06