如何在 Promise 上注册失败的 Mocha 测试

How to register a failed Mocha test on a Promise

我正在编写 Javascript Mocha 单元测试 returns 承诺的代码。我正在使用 Chai as Promised 库。我预计以下最小单元测试会失败。

var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");
chai.use(chaiAsPromised);
chai.should();

var Promise = require("bluebird");

describe('2+2', function () {
    var four = Promise.resolve(2 + 2);
    it('should equal 5', function () {
        four.should.eventually.equal(5);
    })
});

当我 运行 这个测试时,我看到一个断言错误打印到控制台,但测试仍然算作通过。

> mocha test/spec.js 


  2+2
    ✓ should equal 5 
Unhandled rejection AssertionError: expected 4 to equal 5


  1 passing (10ms)

如何编写此测试,以便失败的断言导致测试计为失败?

我需要return断言的结果。此测试按预期失败。

    it('should equal 5', function () {
        return four.should.eventually.equal(5);
    })

对于那些因断言失败而不是承诺单元测试失败而遇到麻烦的其他人,我了解到您不应该将 done 传递给该函数。相反,只是 return 承诺:

it('should handle promises', function(/*no done here*/) {

    return promiseFunction().then(function(data) {
        // Add your assertions here
    });

    // No need to catch anything in the latest version of Mocha;
    // Mocha knows how to handle promises and will see it rejected on failure

});

This article 给我指出了正确的方向。祝你好运!

扩展@piercebot 的回答,我正在使用 chai-as-promised 来解决这样的承诺:

var chai = require('chai');
var expect = chai.expect;
var chaiAsPromised = require("chai-as-promised");
chai.use(chaiAsPromised); 

...

it('should handle promises', function() {    
  return promiseFunction().then(function(res) {
    expect(Promise.resolve(res)).to.eventually.equals(true);
  });
});