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

mockRestore无法清除jest.spyOn().mockImplementation创建的mock该如何处理?

问题原因
  • mockRestore() 仅对原始的spy实例生效,你在afterAll中重新执行jest.spyOn(Date, 'now')会创建一个全新的spy实例,和beforeAll里创建的原spy没有关联,调用新实例的mockRestore()自然无法恢复原生Date.now实现
  • jest.clearAllMocks()只会清除mock的调用记录、入参和返回值记录,不会恢复被mock覆盖的原生方法,对你的场景没有作用
正确实现代码

把创建的spy实例存储在变量中,直接调用原始实例的mockRestore()即可:

// 提前声明变量存储原始spy实例
let dateNowSpy: jest.SpyInstance;

beforeAll((): void => {
  // 将创建的spy赋值给变量
  dateNowSpy = jest.spyOn(Date, 'now').mockImplementation(() => 1626764400000);
});

afterAll((): void => {
  // 调用原始spy的恢复方法
  dateNowSpy.mockRestore();
});
备选兼容方案

如果不想维护spy变量,也可以在收尾阶段直接手动还原原生实现:

afterAll((): void => {
  Date.now = jest.requireActual('Date').now;
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:36:11