我试图了解异步测试在 Jest 中是如何工作的。
我正在尝试做的类似于 Jest 文档中的示例。这工作正常..
function doAsync(c) {
c(true)
}
test('doAsync calls both callbacks', () => {
expect.assertions(2);
function callback1(data) {
expect(data).toBeTruthy();
}
function callback2(data) {
expect(data).toBeTruthy();
}
doAsync(callback1);
doAsync(callback2);
});
但是我想延迟回调调用,所以我尝试了这个....
function doAsync(c) {
setTimeout(() => {
console.log('timeout fired')
c(true)
}, 1000)
}
但测试失败并显示消息
Expected two assertions to be called but received zero assertion calls.
.日志消息“超时触发”未出现在控制台中。
请有人解释为什么它失败了?
最佳答案
您需要使用 jest 的计时器模拟 https://jestjs.io/docs/en/timer-mocks
首先,您告诉 jest 使用模拟计时器,然后在测试中运行计时器。
它看起来像:
function doAsync(c) {
setTimeout(() => {
c(true)
}, 1000)
}
jest.useFakeTimers()
test('doAsync calls both callbacks', () => {
expect.assertions(2);
function callback1(data) {
expect(data).toBeTruthy();
}
function callback2(data) {
expect(data).toBeTruthy();
}
doAsync(callback1);
doAsync(callback2);
jest.runAllTimers(); // or jest.advanceTimersByTime(1000)
});
关于javascript - 开 Jest 单元测试: setTimeout not firing in async test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52633843/