【问题标题】:Testing promises with Mocha [duplicate]用 Mocha 测试 Promise [重复]
【发布时间】:2015-07-16 17:26:33
【问题描述】:

我有一个非常简单的承诺,我想根据承诺的输入来测试它是否已解决或被拒绝。

var isPair = function(number) {
  var deferred = Q.defer();

  if (number % 2 == 0) {
    deferred.resolve(number + " is pair.");
  } else {
    deferred.reject(number + " is not pair.");
  }

}

it("rejects the promise when number is not pair", function() {
  return expect(isPair(1)).to.be.rejected;
}

例如,即使我将参数设置为 2,我的测试也会返回 true。

你能举个例子说明我如何测试一个承诺是解决还是拒绝?如果可能,请使用 expect 语法。

谢谢。

【问题讨论】:

    标签: javascript node.js promise mocha.js q


    【解决方案1】:

    如果你使用 chai,你可以安装 chai-as-promised 来获得你想要的语法:

    it("rejects the promise when number is not pair", function() {
      return expect(isPair(1)).to.eventually.be.rejected();
    });
    

    否则,您可以使用 mocha 提供的 done() 回调来指示成功/失败:

    it("rejects the promise when number is not pair", function(done) {
      isPair(1).then(function() {
        done(new Error('Should have rejected'));
      },
      function() {
        done();
      });
    });
    

    【讨论】:

      【解决方案2】:

      其他答案是可靠的,或者你可以这样做:

      it("rejects the promise when number is not pair", function() {
          return isPair(1).then(Promise.reject, Promise.resolve);
      });
      

      这基本上“反转”了承诺并期望承诺拒绝(如果是则解决它,如果不是则拒绝)。

      因为您使用的是 Q 而不是原生 Promise 或新库:

      it("rejects the promise when number is not pair", function() {
          return isPair(1).then(Q.reject, Q);
      });
      

      这里你真的不需要expect语法:)

      【讨论】:

      • 您好,感谢您的回复。我真的很喜欢你的第二个例子的语法,你能解释一下 Q.reject 和 Q 的实际作用吗?谢谢。
      • @west Q 将任何内容转换为承诺 - 甚至是被拒绝的错误,以便在出现异常时恢复。 Q.reject 拒绝任何承诺的履行 - 所以它基本上是一个“反转” - 它将履行变成拒绝,反之亦然。
      猜你喜欢
      • 2017-04-08
      • 2015-02-17
      • 2015-12-01
      • 2017-02-04
      • 2013-02-10
      • 1970-01-01
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多