如何忽略伊斯坦布尔承诺的所有失败案例

时间:2015-04-10 23:31:45

标签: node.js promise q istanbul

我在NodeJS中使用Q和伊斯坦布尔进行代码覆盖。有没有办法忽略所有失败案例。如果发生意外情况,我的大多数都是全能的,我无法在我的测试中复制。

例如:

somePromise
.then(function() {
  console.log('yay!');
}, function(err) {
  /* istanbul ignore next */ 
  console.error(err);
});

在我的代码中为每个失败条件添加该注释似乎有点费力......

2 个答案:

答案 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);