【发布时间】:2021-03-16 00:38:46
【问题描述】:
我有一种方法可以使用带有 setTimeout 的 Promise 来触发暂停:
pause = ({ time } = {}) => {
const pauseTime = time || 500;
return new Promise((resolve) => {
setTimeout(() => {
resolve()
}, pauseTime)
})
}
我想开个玩笑测试一下,期待timeout函数得到pause方法接收到的时间参数。
jest.useFakeTimers();
const setTimeoutSpy = spyOn(window, 'setTimeout')
const pausePromise = pause({ time: 2500 })
await jest.runAllTimers();
pausePromise.then(() => {
expect(setTimeoutSpy).toHaveBeenCalledTimes(1);
expect(setTimeoutSpy).toHaveBeenCalledWith(2500);
})
jest.useRealTimers();
return pausePromise
我尝试过模拟和间谍。也尝试过没有计时器并等待承诺。但我总是得到相同的结果:预计 spy 被调用了一次,但它被调用了 0 次。
有什么想法吗?
谢谢!
【问题讨论】:
-
你正在监视 setTimeout 在你调用了你正在测试的方法。你需要事先做好。
-
你是对的。我在方法之前移动了间谍,但仍然无法正常工作。
标签: javascript jestjs mocking settimeout spy