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

如何正确使用jest.useFakeTimers().setSystemTime并避免超时问题

解决Jest设置系统时间导致钩子超时的问题

方法1:在测试后恢复真实定时器

未清理假定时器会导致后续测试或钩子中的异步逻辑被阻塞,进而触发超时。在每个测试完成后恢复真实定时器即可解决:

beforeEach(() => {
  jest.useFakeTimers().setSystemTime(new Date('2020-01-01'));
});

afterEach(() => {
  jest.useRealTimers(); // 恢复真实定时器,避免影响后续钩子与测试
});

方法2:仅Fake系统时间相关逻辑(Jest 27+)

如果Fake所有定时器导致依赖的异步代码阻塞,可以指定只Fake系统时间,保留其他定时器的正常运行:

beforeEach(() => {
  jest.useFakeTimers({ doNotFake: ['nextTick', 'setTimeout', 'setInterval'] });
  jest.setSystemTime(new Date('2020-01-01'));
});

afterEach(() => {
  jest.useRealTimers();
});

方法3:临时调整钩子超时时间

若上述方案无效,可直接延长钩子的超时时间,给操作足够的执行时长(仅作为临时规避方案):

beforeEach(() => {
  jest.useFakeTimers().setSystemTime(new Date('2020-01-01'));
}, 10000); // 将超时时间设置为10秒

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:55:33