Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我如何用玩笑来测试承诺延迟?_Javascript_Ecmascript 6_Jestjs_Es6 Promise_Babel Jest - Fatal编程技术网

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));
});