Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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_Node.js_Mongodb - Fatal编程技术网

Javascript 为什么我总是面对摩卡咖啡;超时错误;;诺德还一直告诉我要解决我的承诺?

Javascript 为什么我总是面对摩卡咖啡;超时错误;;诺德还一直告诉我要解决我的承诺?,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我一直收到一个超时错误,它一直告诉我要重新调用done(),即使我调用了done() const mocha = require('mocha'); const assert = require('assert'); const Student = require('../models/student.js'); describe('CRUD Tests',function(){ it('Create Record',function(done){

我一直收到一个超时错误,它一直告诉我要重新调用done(),即使我调用了done()

  const mocha = require('mocha');

  const assert = require('assert');

  const Student = require('../models/student.js');

  describe('CRUD Tests',function(){
     it('Create Record',function(done){
         var s = new Student({
            name: "Yash"
         });

         s.save().then(function(){
            assert(s.isNew === false);

            done();
         });
     });
 });
结果是——

积垢试验 1) 创建记录

0通过(2s)1失败

1) 积垢试验 创建记录: 错误:超过2000毫秒的超时时间。对于异步测试和挂钩,确保调用“done()”;如果回复承诺,请确保它 解决。 (/home/yash/Documents/Development/Node/MongoCRUD/test/CRUD_test.js)


我猜你的摩卡咖啡没有连接到你的数据库。因此,
.save()
正在等待一个它永远无法连接到的连接和您的摩卡咖啡超时


您可以在运行任何Mocha测试之前初始化软件系统

例如,连接数据库

// ROOT HOOK Executed before the test run
before(async () => {
    // connect to the database here
});

// ROOT HOOK Excuted after every tests finished
after(async () => {
    // Disconnect from the database here
});

注意,正如所写的,单元测试忽略了一个事实,即
save()
可能会拒绝而不是解析。每当使用此
done
构造时,请确保单元测试处理错误场景,如下所示:

     s.save().then(function() {
        assert(s.isNew === false);

        done();
     }).catch(error => {
        done(error);
     });
it('Create Record', function() {
    // ...

    return s.save().then(function() {
        assert(s.isNew === false);
     });
});
或者,由于Mocha内置了对承诺的支持,您可以删除
done
参数并直接返回承诺,如下所示:

     s.save().then(function() {
        assert(s.isNew === false);

        done();
     }).catch(error => {
        done(error);
     });
it('Create Record', function() {
    // ...

    return s.save().then(function() {
        assert(s.isNew === false);
     });
});
这种方法的优点是拒绝承诺将自动使测试失败,并且您不需要任何
done()
调用