Javascript 异步mocha测试中的断言放在哪里

Javascript 异步mocha测试中的断言放在哪里,javascript,asynchronous,mocha.js,Javascript,Asynchronous,Mocha.js,我已经了解了如何为异步代码设置测试。这是有道理的,但我不确定实际的结果应该放在哪里 如果这是我的测试: describe('User', function() { describe('#save()', function() { it('should save without error', function(done) { var user = new User('Luna'); user.save(done); }); }); }); 然后我

我已经了解了如何为异步代码设置测试。这是有道理的,但我不确定实际的结果应该放在哪里

如果这是我的测试:

describe('User', function() {
  describe('#save()', function() {
    it('should save without error', function(done) {
      var user = new User('Luna');
      user.save(done);
    });
  });
});
然后我会在哪里放置一些东西来检查用户对象的名称字段或类似的结果

谢谢

user.save返回回调。您应该传入一个函数来执行所需的检查,然后调用done,而不是只传入done

例如:

user.save((err) => {
 //do the needed checks on user
 done()
})

顺便说一下,您实例化的用户对象在调用save后包含name和id。查看更多信息

根据代码的外观,我假设您正在使用Mongoose或类似的东西,在这种情况下,save函数的回调有两个参数,一个错误和保存的文档


这是有道理的。我现在的问题是,我没有得到断言失败消息,而是得到了一个超时,但至少它是一个失败。@Bren,这通常发生在“完成”没有被调用时,你确定在“完成”之前没有任何中断导致它没有被调用吗?此外,我对此表示怀疑,但也可能是这样的,在调用“完成”之前,实际上需要很长时间才能完成所有需要完成的事情。在这种情况下,看看这里:它导致了一个未经处理的承诺,所以这可能是罪魁祸首。这个承诺比我测试的要低一些。是的,那可能就是它了!
describe('User', function() {
  describe('#save()', function() {
    it('should save without error', function(done) {
      var user = new User('Luna');
      user.save(function (err, doc) {
        assert.equal(doc.name, 'Luna')
        done()
      });
    });
  });
});