我有一种使用带有 setTimeout 的 promise 触发暂停的方法:
pause = ({ time } = {}) => {
const pauseTime = time || 500;
return new Promise((resolve) => {
setTimeout(() => {
resolve()
}, pauseTime)
})
}
我想用 Jest 来测试它,期望 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 。也尝试过没有计时器并等待 promise 。但我总是得到相同的结果:预期 spy 被调用了一次,但它被调用了零次。 任何的想法?
谢谢!
最佳答案
最后我发现了这个问题。
这是 spy 实现的一个问题:
spyOn(...
而不是 jest.spyOn(...
window
至 global
感谢大家的评论!
关于javascript - 用 Jest 测试 setTimeout 上的毫秒参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65135435/