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