首页 文章

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

提问于
浏览
11

我正在编写返回promises的代码的Javascript Mocha单元测试 . 我正在使用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)

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

3 回答

  • 10

    对于其他任何因断言失败而没有使用promises进行单元测试失败的人,我了解到你不应该将 done 传递给该函数 . 相反,只需返回承诺:

    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指出了我正确的方向 . 祝好运!

  • 0

    我需要返回断言的结果 . 此测试按预期失败 .

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

    扩展@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);
      });
    });
    

相关问题