如何使用Mocha和Istanbul编写包含良好的测试用例?

时间:2015-05-22 07:24:49

标签: node.js mongoose mocha chai istanbul

我正在尝试使用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);
}

据我所知,这对于未处理的异常(例如数据库发生故障等)来说是一个全能的结果。此错误也旨在冒泡,以便应用程序崩溃,然后我可以修复它。我如何编写测试用例来涵盖这个?或者更确切地说,我是否应该尝试覆盖这个?

1 个答案:

答案 0 :(得分:1)

您可以使用模拟库(例如Mockgoose)来测试错误情况 - 特别是,请查看throwError选项,该选项会在尝试连接时引发错误 - 请参阅{ {3}}文档。这应该是上述测试的单独测试用例。

正如@limelights在上面的评论中所说(正确地,在我看来),最好避免在单元测试中使用真正的数据库。