Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 对于异步测试和挂钩,确保调用“done()”;如果返回Promise,请确保它已解决大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在测试时对nodejs进行了测试,我得到了未声明的完成函数错误.

Error: Timeout of 2000ms exceeded. For async tests and hooks,ensure "done()" is called; if returning a Promise,ensure it resolves.

我的测试代码是,我已完成回调但仍然收到错误调用done();

it('remove exisTing subdocument',(donE) => {
    const Vic = new User({
      name: 'Vic',posts: [{ title: 'Leaning Nodejs' }]
    });

    vic.save()
      .then(() => User.findOne({ name: 'Vic' }))
      .then((user) => {
        const post = user.posts[0];
        post.remove();
        return user.save();
      })
      .then(() => User.findOne({ name: 'Vic' }))
      .then((user) => {
        assert(user.posts.length === 0);
        done();
      });
  });

解决方法

我面临同样的问题,@ Mfal评论链接有所帮助.我正在扩展它.

当出现错误/错误断言时,将在promise中引发错误.这导致承诺拒绝.一旦拒绝完成,从未调用过,mocha报告超时.
我通过写一个.catch块并用它来链接它来解决这个问题:

it('resolves',(donE) => {
            fooAsyncPromise(arg1,arg2).then((res,body) => {
                expect(res.statusCodE).equal(incorrectvalue);
                done();
            }).catch(donE);
         });

Wietse’s blog中提到的其他方法是:

链接一个then(done,donE)来处理promise的拒绝和拒绝.

it('resolves',(donE) => {
           resolvingPromise.then( (result) => {
             expect(result).to.equal('promise resolved');
           }).then(done,donE);
         });

回报承诺:

it('resolves',() => {
          return resolvingPromise.then( (result) => {
            expect(result).to.equal('promise resolved');
          });
        });

使用异步/等待:

it('assertion success',async () => {
          const result = await resolvingPromise;
          expect(result).to.equal('promise resolved'); 
        });
@H_301_54@

大佬总结

以上是大佬教程为你收集整理的node.js – 对于异步测试和挂钩,确保调用“done()”;如果返回Promise,请确保它已解决全部内容,希望文章能够帮你解决node.js – 对于异步测试和挂钩,确保调用“done()”;如果返回Promise,请确保它已解决所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。