【发布时间】:2019-08-13 14:02:40
【问题描述】:
更新:可以肯定地说这基本上是Jest: Timer and Promise don't work well. (setTimeout and async function)的副本
我有一个在执行异步函数后会重复的函数。我想验证jest.advanceTimersOnTime(5000) 是否继续产生expect(doAsyncStuff).toHaveBeenCalledTimes(X);。
我观察到我们可以调用以重复该功能,但在要求 jest 提前计时器时它不会“通过”。当您删除它之前的异步函数时,它确实有效。所以听起来我必须让 doAsyncStuff 在这里“调用”或解决一些未决的承诺?
功能
function repeatMe() {
setTimeout(() => {
doAsyncStuff.then((response) => {
if (response) {
console.log("I get here!");
repeatMe();
}
})
}, 5000);
}
测试
jest.useFakeTimers();
let doAsyncStuff = jest.spyOn(updater, 'doAsyncStuff');
doAsyncStuff.mockResolvedValue(true);
repeatMe();
jest.advanceTimersByTime(5000);
expect(doAsyncStuff).toHaveBeenCalledTimes(1);
jest.advanceTimersByTime(5000);
expect(doAsyncStuff).toHaveBeenCalledTimes(2); // Failed?
【问题讨论】:
标签: javascript reactjs jestjs