我正在尝试编写一个单元测试,用于将文档插入(然后检索)到mongodb。但是,我一直收到超时错误,它表明永远不会调用 describe('create and getOneById', () => {
it('creates a new checkbookEntry, and retrieves it from the db', (done) => {
var EXAMPLE_ENTRY = {
type: 'debit',
date: Date(),
description: 'Example of a cb entry',
account: 'PNC',
amount: 239.33
};
CheckbookEntry.create(EXAMPLE_ENTRY.type,
EXAMPLE_ENTRY.date,
EXAMPLE_ENTRY.description,
EXAMPLE_ENTRY.account,
EXAMPLE_ENTRY.amount)
.then(function(createdEntry){
return CheckbookEntry.getOneById(createdEntry._id);
})
.then(function(foundEntry){
expect(foundEntry).to.eql(EXAMPLE_ENTRY);
done();
}, function(err){
assert.fail(err);
done();
});
}).timeout(5000);
}); // end describe create
。 (Mongod正在运行,我可以看到插入的对象很好,并且使用console.log进行检索。)
我正在使用的是什么:
Node.js的, ES6, 猫鼬, 摩卡, 柴
CheckbookEntry是一些奇怪的包装,可以让我使用promises。
function ids = mosfet(vgs,vds)
if vgs>=10
ids = vds/0.028;
else
ids = 0;
end
end
有关如何使其正常工作的任何建议吗?
答案 0 :(得分:1)
我只能猜测,但我认为问题可能是由此引起的:
.then(function(foundEntry){
expect(foundEntry).to.eql(EXAMPLE_ENTRY);
done();
}, function(err){
assert.fail(err);
done();
});
更具体地说,在履行/拒绝处理程序中使用断言而不继续承诺链。
如果断言抛出异常,done()
永远不会被调用。根据正在使用的承诺实现,您甚至可能永远不会收到有关异常的通知。此外,onFulFilled
处理程序中抛出的异常不会触发传递给相同onRejected
方法的.then()
处理程序。
因为Mocha supports promises out of the box而不是使用done
回调,所以返回您的保证链:
return CheckbookEntry.create(...)
.then(...)
.then(..., ...);
这样,异常将传播回Mocha,后者将处理它。
FWIW,Mongoose also supports promises out of the box。