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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:31:20