如何正确使用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
相关产品推荐
相关产品推荐

