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

测试嵌套调用函数时Jest spy失效问题排查

问题原因

你搞反了函数调用与间谍创建的顺序——先执行了function1,再挂载间谍,此时function2已经完成调用,Jest的间谍根本没监控到这次调用,所以才会显示调用次数为0。

修正后的测试代码
describe('ExampleComponent', () => {
  let client;

  beforeEach(() => {
    client = new Example();
  });

  it('should call function2 once', () => {
    // 第一步:先创建function2的间谍
    const function2Spy = jest.spyOn(client, 'function2');
    // 可选:如果需要屏蔽function2原逻辑,可指定模拟返回值
    function2Spy.mockReturnValue('mock data');

    // 第二步:再调用function1
    client.function1();

    // 第三步:断言调用次数
    expect(function2Spy).toHaveBeenCalledTimes(1);
  });
});
额外说明
  • 间谍必须在目标函数被调用之前创建,才能捕获到完整的调用记录。
  • 如果function2的返回值会影响function1的逻辑,建议用mockReturnValue(同步场景)或mockResolvedValue(异步场景)指定模拟返回值,保证测试的独立性。
  • 你的示例代码里没有异步逻辑,测试函数的async关键字可以去掉,避免不必要的异步处理。

内容的提问来源于stack exchange,提问作者s.khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:36:21