我在NodeJS中使用Q和伊斯坦布尔进行代码覆盖。有没有办法忽略所有失败案例。如果发生意外情况,我的大多数都是全能的,我无法在我的测试中复制。
例如:
somePromise
.then(function() {
console.log('yay!');
}, function(err) {
/* istanbul ignore next */
console.error(err);
});
在我的代码中为每个失败条件添加该注释似乎有点费力......
答案 0 :(得分:1)
简短的回答是,你不能轻易地以编程方式忽略所有的" catchall"承诺失败。
在这里做的正确的事情是在你的测试中使用Q和像Sinon这样的模拟库来强制你的承诺流中的承诺拒绝,如下所示:
var Q = require('q');
var sinon = require("sinon");
var controller = new Controller(); //Dummy constructor
//controller.method will automatically return a promise with a rejected state
sinon.stub(controller,"method").returns(Q.reject());
这样伊斯坦布尔将输入您代码的这些部分,您将获得更高的代码覆盖百分比,这很好!
答案 1 :(得分:0)
所以我最终做了一些事情。为了帮助清理错误捕获,我创建了一个函数,我将其传递给promise failure catch,以便istanbul将其视为变量而不是未输入的函数。然后,我可以单独测试错误处理。
var errCatch = function(err) { /* something */ };
somePromise
.then(function() {
console.log('yay!');
}, errCatch);