用摩卡测试承诺

时间:2015-05-06 14:02:25

标签: javascript node.js promise mocha q

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

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;
}

即使我将param设置为2,我的测试也会返回true。

您能举例说明我如何测试承诺是否已解决或被拒绝?如果可能,请使用期望语法。

谢谢。

2 个答案:

答案 0 :(得分:3)

如果您正在使用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();
  });
});

答案 1 :(得分:2)

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

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

这基本上是#34;倒置"承诺并期望拒绝承诺(如果承诺拒绝它,如果没有则拒绝)。

由于您使用的是Q而非本机承诺或新库:

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

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