'expect'语句失败时摩卡柴超时错误

时间:2016-10-15 22:58:52

标签: node.js mocha chai

当测试失败时,我会使用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();
      });
    });
  });
});

当我使用正确的期望值运行它时,测试传递没有超时(我已经检查过看到返回的值都是正确的)。但是当我在任一语句中将'number'更改为(例如)'string'时,而不是失败并抛出'Expected ...,Actual ...'错误,它会超时。我已经检查了文档和柴的公开问题,找不到答案。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

那是因为承诺正在捕捉失败预期所引发的错误,导致done回调未被调用。

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

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