【发布时间】:2019-09-06 03:49:42
【问题描述】:
使用Mocha、Chai 和Mockgoose 运行单元测试时出现超时问题
我有一个函数Assessment.NewAssessment(assessmentDetails) 可以将评估保存在数据库中。
注意:`Assessment.NewAssessment 返回一个承诺(它是一个异步函数)
这是我到目前为止所做的:
require('assert');
let chai = require('chai');
let chaiAsPromised = require("chai-as-promised");
chai.use(chaiAsPromised);
let expect = chai.expect;
let Assessment = require('../models/Assessment');
let CustomError = require('../CustomError');
let mongoose = new (require('mongoose').Mongoose)();
let Mockgoose = require('mockgoose').Mockgoose;
let mockgoose = new Mockgoose(mongoose);
before(function (done) {
mockgoose.prepareStorage().then(async function () {
mongoose.connect(
'mongodb://127.0.0.1/' + process.env.DB_NAME + '_test?replicaSet=rs0',
{useNewUrlParser: true},
function (err) {
done(err);
});
});
});
describe('Class Assessment', function () {
describe('Function GetAll', function () {
it('Throw an error with code 400 for non-object parameters', () => {
return expect(Assessment.GetAll('test'))
.to.be.eventually.rejectedWith(CustomError)
.and.have.property('code', 400);
});
it('Successfully creating an assessment', async () => {
let assessmentDetails = {
name: 'test',
createdBy: mongoose.Types.ObjectId(),
};
let assessment = await Assessment.NewAssessment(assessmentDetails)
return expect(assessment).to.be.an('object');
});
});
});
在Assessment.js:
static async NewAssessment(assessmentDetails) {
if (!assessmentDetails || typeof assessmentDetails !== 'object') {
throw new CustomError('assessmentDetails is not defined.', HttpStatus.BAD_REQUEST);
}
return await new Assessment(assessmentDetails).save();
}
运行mocha --timeout 120000的输出是:
Error: Timeout of 120000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
我在这里做错了什么?
【问题讨论】:
-
它停在哪里?在哪一步?
-
第一次测试正确通过,在第二次测试停止,函数调用
Assessment.NewAssessment(assessmentDetails) -
我无法执行您的代码并对其进行测试,因此作为未经测试的建议,我会说尝试从该函数中删除
return,并在expect语句之后调用done()。 另外你是否从NewAssessment返回承诺? -
这是一个异步函数,我会在问题中添加它
-
我试过用
done()同样,超时
标签: node.js unit-testing mocha.js chai mockgoose