直接使用 toHaveBeenCalledTimes 测试 setTimeout 调用次数。与老师视频不符

直接使用 toHaveBeenCalledTimes 测试 setTimeout 调用次数。与老师视频不符

expect(setTimeout).toHaveBeenCalledTimes(1)


直接使用 toHaveBeenCalledTimes 测试 setTimeout 调用次数。与老师视频不符。


jest版本: "^27.2.5"


提示错误:

https://img1.sycdn.imooc.com//climg/6166ae3509f2737311040666.jpg


相关代码:

const fetchUser = (cb) => {
setTimeout(() => {
cb('hello')
}, 1000)
}

const loopFetchUser = (cb) => {
setTimeout(() => {
cb('one')
setTimeout(() => {
cb('two')
}, 2000)
}, 1000)
}

jest.useFakeTimers()

it('test the callback after 1 sec', () => {
const callback = jest.fn()
fetchUser(callback)
expect(callback).not.toHaveBeenCalled()

// control time
expect(setTimeout).toHaveBeenCalledTimes(1) // 这里
})


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
张轩 2021-10-14 10:08:11

同学你好 经查 jest27 对 timers 有 breaking change,但是又没有更新文档。

解决方案在这里:https://stackoverflow.com/questions/68016538/matcher-error-received-value-must-be-a-mock-or-spy-function

​改成 jest.useFakeTimers('legacy');

就可以了

亲测可用

  • 提问者 阿辉cain #1

    好的,谢谢老师

    2021-10-14 10:57:46
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师