1

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

例如:

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

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

4

2 回答 2

1

简短的回答是,您不能轻易地以编程方式忽略所有“笼统”的承诺失败。

正确的做法是在您的测试中使用 Q 和像Sinon这样的模拟库来强制在您的 Promise 流程中拒绝 Promise,如下所示:

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());

这样,Istanbul输入您的代码的这些部分,您将拥有更高的代码覆盖率,这很好!

于 2015-04-10T23:40:25.677 回答
0

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

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

somePromise
.then(function() {
  console.log('yay!');
}, errCatch);
于 2015-04-14T19:22:20.897 回答