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

How to ignore all failure cases for promises with Istanbul

我使用 Q 在 NodeJS 中使用 promise,并使用 Istanbul 进行代码覆盖。有没有办法忽略所有失败案例。我的大多数都是包罗万象的,以防万一发生我无法在测试中复制的意外情况。

例如:

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

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

简短的回答是,您不能轻易地以编程方式忽略所有 "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());

这样伊斯坦布尔 输入您的代码的这些部分,并且您将拥有更高的代码覆盖率,这很好!

所以我最后什么都做了一点。为了帮助清理错误捕获,我创建了一个传递给 promise failure catch 的函数,这样 istanbul 就将它视为一个变量,而不是一个未输入的函数。然后我可以单独对错误处理进行单元测试。

var errCatch = function(err) { /* something */ };

somePromise
.then(function() {
  console.log('yay!');
}, errCatch);