Javascript 我如何用玩笑来测试承诺延迟?
这是我用来延迟进程的代码(用于退避) 我想测试一下,但我不能。我试着和假定时器一起工作,但我的测试从未结束Javascript 我如何用玩笑来测试承诺延迟?,javascript,ecmascript-6,jestjs,es6-promise,babel-jest,Javascript,Ecmascript 6,Jestjs,Es6 Promise,Babel Jest,这是我用来延迟进程的代码(用于退避) 我想测试一下,但我不能。我试着和假定时器一起工作,但我的测试从未结束 test('promiseDelay delays for 1s', async (done) => { jest.useFakeTimers(); Promise.resolve().then(() => jest.advanceTimersByTime(100)); await promiseDelay(100); }); 我想你只需要从函数中
test('promiseDelay delays for 1s', async (done) => {
jest.useFakeTimers();
Promise.resolve().then(() => jest.advanceTimersByTime(100));
await promiseDelay(100);
});
我想你只需要从函数中返回承诺,比如
test('promiseDelay delays for 1s',() => {
jest.useFakeTimers();
return Promise.resolve().then(() => jest.advanceTimersByTime(100));
});
然后监视要调用的setTimeout一次。
promiseDelay
返回一个promiseDelay
在ms
后解析的Promise
,因此在中调用spy
并测试在不同的间隔后是否调用了spy
:
description('promiseDelay',()=>{
beforeach(()=>{jest.useFakeTimers();});
之后(()=>{jest.useRealTimers();});
test('在超时之前不应解析',async()=>{
const spy=jest.fn();
promiseDelay(100)。then(spy);/@Geekajay问题中的测试向测试函数提供了参数done
,但从未调用它,这就是特定测试从未完成的原因:谢谢,我找到并修复了它。但是测试“如果<100ms”总是失败,则不应解决。因为spy函数被调用了。
test('promiseDelay delays for 1s',() => {
jest.useFakeTimers();
return Promise.resolve().then(() => jest.advanceTimersByTime(100));
});