【问题标题】:Mocha Chai timeout error on 'expect' statement failure'expect' 语句失败的 Mocha Chai 超时错误
【发布时间】:2016-10-16 07:37:48
【问题描述】:

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

当我使用正确的期望值运行它时,测试通过而没有超时(并且我检查了返回的值是否都正确)。但是,当我在任一语句上将“数字”更改为(例如)“字符串”,而不是失败并抛出“预期 ...,实际 ...”错误时,它会超时。我已经查看了文档和 Chai 的未解决问题,找不到答案。

非常感谢您的帮助。

【问题讨论】:

    标签: node.js mocha.js chai


    【解决方案1】:

    这是因为 Promise 正在捕获失败的期望引发的错误,导致 done 回调未被调用。

    Mocha 理解 Promise,因此您可以返回 Promise 而不是使用回调:

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

    任何失败的期望都将导致 promise 被拒绝并且测试被报告为失败。

    或者,您可以坚持使用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);
        });
      });
    });
    

    【讨论】:

    • 嗯,有道理,谢谢!忘了摩卡咖啡让它变得如此简单。非常感谢。
    • 这个答案的第一个例子中重要的是它返回了承诺。我第一次阅读这篇文章时并没有意识到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2014-12-30
    相关资源
    最近更新 更多