我开始使用mocha作为测试覆盖率工具istanbul
,其中一个好处就是它向您展示了在测试代码逻辑中测试过的路径(分支)。
只有在数据库发生错误时才能使用路径。
Screenshot of the part I am interested in testing
[I]表示第一个if
未经过测试。
问题是它使用回调function(err, data)
并且错误通过mongoose
模型方法find()
传递给此回调,因此我没有流量控制这部分代码。
在这种特定情况下,我使用supertest
这是一个模块,用于测试node.js
中的路由,并向一个调用mongoose
模型方法find()
的路由发出请求。
测试此路径的最佳选择是什么?创建存根来模拟方法?或者只是删除if?
编辑:我注意到我使用匿名函数作为回调(err, data)
并且这样做我无法测试它,因为它没有暴露给外部范围。我想到的一种方法是创建一个函数:
handleDbFetchingResponse(res) {
return function(err, data) {
let response = {};
if (err) {
response = {error: true, message: 'Error fetching data'};
} else {
response = {error: false, message: data};
}
res.json(response);
}
}
现在我可以公开函数并测试它,但我创建了另一个问题。由于其他表达路由在从数据库获取数据时有另一个逻辑,我将不得不为它们中的每一个创建一个处理函数。也许有一种方法可以创建一个handlerBuilder函数,它返回一个新的处理程序,传递不同的参数来处理特定的情况。