我正在尝试使用chai& amp;编写Mongoose模型函数的单元测试用例。摩卡。
模型功能
function getDetails(parameter, fn) {
Model.findOne({
parameter: parameter
})
.lean()
.exec(function(err, document) {
if (err) {
return fn(err, null);
}
return fn(err, document);
});
};
单元测试用例
describe('→ Database model functions.', function() {
it('getDetails() - should fetch and return details from database', function(done) {
model.getDetails(parameter, function(err, document) {
expect(err).to.be.null;
expect(document).not.to.be.null;
expect(document).to.be.an('object');
done();
});
});
});
使用istanbul
运行代码覆盖率报告后,我的分支覆盖率得分很低,因为未涵盖以下块。
if (err) {
return fn(err, null);
}
据我所知,这对于未处理的异常(例如数据库发生故障等)来说是一个全能的结果。此错误也旨在冒泡,以便应用程序崩溃,然后我可以修复它。我如何编写测试用例来涵盖这个?或者更确切地说,我是否应该尝试覆盖这个?
答案 0 :(得分:1)
您可以使用模拟库(例如Mockgoose)来测试错误情况 - 特别是,请查看throwError
选项,该选项会在尝试连接时引发错误 - 请参阅{ {3}}文档。这应该是上述测试的单独测试用例。
正如@limelights在上面的评论中所说(正确地,在我看来),最好避免在单元测试中使用真正的数据库。