jest-preset-angular中and.callThrough()的等效方法是什么?
等效于Jasmine
and.callThrough() 的 Jest 方法(适用于 jest-preset-angular) 当然有!Jasmine 的 and.callThrough() 核心作用是让 spy/mock 调用原始函数的实现,而不是返回默认值或自定义的 mock 结果。在 Jest(包括 jest-preset-angular 环境)中,你可以根据创建 mock 的方式,用以下几种方式实现同样的效果:
1. 使用 jest.spyOn 创建间谍时
jest.spyOn 的默认行为其实就和 and.callThrough() 完全一致——它会创建一个间谍,但仍然调用原始方法。比如:
// Jasmine 写法 spyOn(myService, 'getData').and.callThrough(); // Jest 等效写法(默认行为,无需额外调用) jest.spyOn(myService, 'getData');
如果之前你已经给这个 spy 设置了自定义的 mock 实现(比如用 mockReturnValue 或 mockImplementation),想要恢复调用原始方法,可以这样做:
const spy = jest.spyOn(myService, 'getData').mockReturnValue('fake data'); // 恢复调用原始方法 spy.mockImplementation((...args) => myService.getData(...args)); // 或者更彻底的恢复(清除所有mock记录并还原原始方法) spy.mockRestore();
2. 手动创建 mock 函数时
如果你是用 jest.fn() 手动创建的 mock,想要让它调用原始函数,需要在 mockImplementation 里显式调用原始函数:
const originalGetData = myService.getData; const mockGetData = jest.fn().mockImplementation((...args) => originalGetData(...args));
这就完全等效于 Jasmine 中给 mock 函数设置 and.callThrough() 的效果。
内容的提问来源于stack exchange,提问作者radio_head
相关产品推荐
相关产品推荐

