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

Mock fetch时Jest测试结果异常但代码实际运行正常的问题排查

问题分析与解决方案

你遇到的核心问题是异步函数的测试没有正确处理Promise:createEvent是一个async函数,它执行后返回的是一个Promise对象,而不是直接返回布尔值true。你直接用expect(createEvent(newEvent)).toBe(true)断言时,实际是在比较Promise对象和true,自然会得到不匹配的结果(控制台里的Received: {}是Promise对象的简略表现形式)。

修正测试代码的两种有效方式

方式一:使用async/await(推荐,代码更直观)

把测试函数声明为async,然后等待createEvent执行完成后再做断言:

global.fetch = jest.fn(() => Promise.resolve({ 
  json: () => Promise.resolve({ success: true }), 
}));

it('returns proper value', async () => {
  // 等待异步函数执行完成拿到结果
  const result = await createEvent(newEvent);
  expect(result).toBe(true);
});

方式二:返回Promise并通过.then断言

如果更习惯Promise链式调用的写法,可以让测试函数返回Promise,在回调里完成断言:

global.fetch = jest.fn(() => Promise.resolve({ 
  json: () => Promise.resolve({ success: true }), 
}));

it('returns proper value', () => {
  // 返回Promise让Jest等待其完成
  return createEvent(newEvent).then(result => {
    expect(result).toBe(true);
  });
});

额外测试场景补充

如果需要覆盖createEvent的其他返回情况,可以调整fetch的mock:

  • 测试返回false的场景:让mock返回{success: false}的响应
global.fetch = jest.fn(() => Promise.resolve({ 
  json: () => Promise.resolve({ success: false }), 
}));
  • 测试返回null的出错场景:让fetch模拟请求失败
global.fetch = jest.fn(() => Promise.reject(new Error("Fetch failed")));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:42:56