【问题标题】:Ensure "done()" is called JS Error确保“done()”被称为 JS 错误
【发布时间】:2017-08-10 17:14:13
【问题描述】:

尝试将新元素插入到我的 mongoDB 数据库中,当我使用终端“npm run test”时,它给了我这个错误:

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

这是我将元素保存到数据库中的代码:

const mocha = require('mocha');
const assert = require('assert');
const PPB = require('../Models/Pingpongballs');

describe('Saving records', function() {
  it('Saves record to db', function(done) {
    var ppball = new PPB ({
      amount: 5
    });

    ppball.save().then(function() {
      assert(ppball.isNew === false);
      done();
    });
  });
});

【问题讨论】:

    标签: javascript node.js mongodb mocha.js


    【解决方案1】:

    在 mocha 中,对于异步测试,您可以调用 done 回调或返回承诺。您收到此错误,因为您的测试失败,并且您没有 catch 阻止调用 done 并出现错误:

    describe('Saving records', function() {
      it('Saves record to db', function() {
        var ppball = new PPB ({
          amount: 5
        });
    
        return ppball.save().then(function(){
          assert(ppball.isNew === false);
          return null;
        });
      });
    });
    

    【讨论】:

    • 你可以去掉 return null
    • @Denis,作为实践表明,最好总是从then() 函数内部返回或抛出。 There is 描述了您应该这样做的原因之一。
    • @alexmac,如果它是 Promise 运行,我理解问题,但断言是同步代码,它仍然是一个好习惯吗?谢谢你的信息,我不知道
    • @Denis,bluebird 不知道assert 是同步代码,并且仍然显示警告。所以我更喜欢总是打电话给return,不要忘记在真正需要的时候这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 2021-10-07
    • 2019-09-01
    • 2016-05-03
    • 1970-01-01
    相关资源
    最近更新 更多