'expect' 语句失败时出现 Mocha Chai 超时错误

Mocha Chai timeout error on 'expect' statement failure

当测试失败时,我使用 Mocha 和 Chai 的 'expect' 语句时出现意外超时行为。

代码:

require('./lib/test-env.js');

const expect = require('chai').expect;
const estimateQuery = require('../lib/estimate-query-helper.js');

describe('testing auth routes', function() {
  describe('testing estimate query helper', function() {
    it('should return an average daily rate and occupancy rate', (done) => {
      estimateQuery.getEstimate()
      .then(result => {
        expect(result[0]['avg(`Average Daily Rate`)']).to.be.a('number');
        expect(result[0]['avg(`Occupancy Rate LTM`)']).to.be.a('number');
        done();
      });
    });
  });
});

当我 运行 使用正确的预期值时,测试通过 w/no 超时(我已经检查返回值是否全部正确)。但是当我在任何一个语句上将 'number' 更改为(例如)'string',而不是失败并抛出“预期...,实际...”错误时,它会超时。我已经查看了文档和 Chai 的未解决问题,但找不到答案。

非常感谢您的帮助。

那是因为 promise 捕获了预期失败抛出的错误,导致 done 回调未被调用。

Mocha 理解承诺,因此您可以 return 承诺而不是使用回调:

describe('testing auth routes', function() {
  describe('testing estimate query helper', function() {
    it('should return an average daily rate and occupancy rate', () => {
      return estimateQuery.getEstimate()
        .then(result => {
          expect(result[0]['avg(`Average Daily Rate`)']).to.be.a('number');
          expect(result[0]['avg(`Occupancy Rate LTM`)']).to.be.a('number');
        });
    });
  });
});

任何失败的期望都会导致承诺被拒绝,并且测试被报告为失败。

或者,您可以坚持使用 done 回调并添加一个 catch:

describe('testing auth routes', function() {
  describe('testing estimate query helper', function() {
    it('should return an average daily rate and occupancy rate', (done) => {
      estimateQuery.getEstimate()
        .then(result => {
          expect(result[0]['avg(`Average Daily Rate`)']).to.be.a('number');
          expect(result[0]['avg(`Occupancy Rate LTM`)']).to.be.a('number');
          done();
        })
        .catch(done);
    });
  });
});