Javascript 为什么我总是面对摩卡咖啡;超时错误;;诺德还一直告诉我要解决我的承诺?
我一直收到一个超时错误,它一直告诉我要重新调用done(),即使我调用了done()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){
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()
调用