我想用Jest测试框架测试一个使用pRetry npm包的函数。我想加快测试流程,因此我不想等到pRetry实际计时器触发。为了简化任务,我想让我的测试运行时间小于500 ms,并打印//***行中的console.log消息7(或者8?)次。我试过使用jest.useFakeTimers,jest.runAllTimers和其他没有成功的方法。请帮助,我卡住了:)
我的函数看起来像:
myFunc() {
return pRetry(async () => {
if(Math.random() > 0.5){
return true;
}
console.log(`currentTime: ${Date.now()}`); // ***
throw new Error('Calculations failed....');
}, {
retries: 7,
minTimeout: 500,
});
}
我的测试看起来像:
it('should throw an error if calculations failed', async () => {
await myFunc();
expect(true).toBeTruthy();
});
2条答案
按热度按时间vfh0ocws1#
需要这个,但也找不到办法。
最后,我让pRetry的minTimeout从一个函数中获取它的值,这个函数是我在测试期间存根的(所以我导出了它)
大概是这样:
这个很好用
8ehkhllq2#
我设法(非常简单地)使用Jest模拟p-retry: