Mocha/Chai/ChaiAsPromised : expect(promise).最终不等待解决

Mocha/Chai/ChaiAsPromised : expect(promise).eventually not waiting for resolution

我有一个功能要测试。它 returns 一个承诺。这是一个假的版本,它只是稍等片刻然后解决了 promise。

function testee(){
    let myPromise = new Promise(
        (resolve, reject) => {
            setTimeout( () => {               
                resolve( 777 );
            }, 1000);
        }
     );
 
    return myPromise;
}

我正在使用 Mocha、Chai 和 ChaiAsPromised,我尝试最终使用进行测试,认为这将等待 promise 解决。我故意写了一个应该失败的测试,但它通过了。为什么?

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

describe("Testing Promises", function() {
    it("should return a particular value ", function() {

     const testPromise = testee();

     // no matter what I specify in the equal it always passes the test
     expect(testPromise).to.eventually.equal(490);
});

我知道还有其他方法可以在 Mocha 下管理异步处理,或者避免使用 Promises,但我想了解为什么我的测试没有像我预期的那样失败。

由于断言语句是异步代码,您应该return断言语句,以便mocha知道它应该等待调用此函数来完成测试。

请阅读mochadoc about chai-as-promised and asynchronous-code

const { testee } = require('.');
var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
var expect = chai.expect;
chai.use(chaiAsPromised);

describe('Testing Promises', function () {
  it('should return a particular value ', function () {
    const testPromise = testee();
    return expect(testPromise).to.eventually.equal(777);
  });
});