测试嵌套调用函数时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
相关产品推荐
相关产品推荐

