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

使用jest-fetch-mock模拟fetch返回null及后续报错问题求助

问题根因

你遇到的Cannot read property 'json' of undefined报错,本质是业务代码中调用的全局fetch没有被正确mock,调用后返回了undefined,执行undefined.json触发报错进入catch分支,最终返回null。

分步解决方案

1. 确认jest配置加载了初始化文件

检查你的jest配置(jest.config.js 或 package.json 中的jest字段)是否正确配置了初始化文件路径:

// jest.config.js 示例
module.exports = {
  // 其余原有配置保持不变
  setupFilesAfterEnv: ['<rootDir>/src/setupTest.js'],
}

如果是CRA(Create React App)生成的项目,默认会自动加载src/setupTest.js,如果修改了文件存放位置需要手动更新配置。

2. 修正setupTest.js配置

修改初始化文件,显式将mock的fetch挂载到全局对象,避免环境差异导致的挂载失败:

import fetchMock from 'jest-fetch-mock'
global.fetch = fetchMock
fetchMock.enableMocks()

3. 修正测试文件代码

不要在测试文件中单独导入jest-fetch-mock,直接使用已经挂载到全局的mock fetch实例即可。你之前单独导入的局部fetch和业务代码使用的全局fetch不是同一个实例,导致mock配置不生效:

import { random } from "./random";

test("collects data", async () => {
  fetch.mockResponseOnce(JSON.stringify([{ test: "data" }]))
  const data = await random()
  // 可选:新增fetch调用校验,确认请求地址符合预期
  expect(fetch).toHaveBeenCalledWith("https://api.punkapi.com/v2/beers/random")
  expect(data).toEqual([{ test: "data" }])
})

完成以上修改后重新运行测试即可正常通过。

内容的提问来源于stack exchange,提问作者fluffy-lionz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:24:04