【发布时间】:2022-07-23 12:35:22
【问题描述】:
我想在全局范围内模拟超时函数,所以我在 beforeAll 块中添加了对 jest.useFakeTimers 的调用。当我运行测试时,jest.advanceTimersByTime 没有执行预定的代码。我使用间谍来确认模拟确实被调用了。但是我注意到,如果我将 jest.advanceTimersByTime 调用移到测试函数或 beforeEach 块中,它会起作用。
这是一个重现问题的简单示例。
describe('test', () => {
beforeEach(() => {
// Only beforeEach block works, NOT beforeAll
jest.useFakeTimers();
})
it('setTimeout calls callback', () => {
const callback = jest.fn();
setTimeout(() => {
callback()
}, 3000);
expect(callback).not.toHaveBeenCalled();
jest.advanceTimersByTime(3000);
expect(callback).toHaveBeenCalledTimes(1);
})
})
我在docs 中没有看到任何解释这一点的内容。我正在使用 Jest 26.6.2。
【问题讨论】:
-
您提供的示例代码为我传递。当我将
beforeEach更改为beforeAll时,它也通过了。有没有其他方法可以重现这个问题?
标签: javascript typescript jestjs settimeout