node.js - 使用 Mockgoose/Mongoose 通过 Mocha 和 Chai-Expect 保存/创建时超时

标签 node.js unit-testing mocha.js chai mockgoose

我使用 MochaChaiMockgoose 运行单元测试时出现超时

我有一个函数Assessment.NewAssessment(assessmentDetails),它将在数据库中保存评估。

注意:`Assessment.NewAssessment 返回一个 promise (它是一个异步函数)

这是我到目前为止所做的:

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.

我在这里做错了什么?

最佳答案

我不知道为什么,但有了这个:

it('Successfully creating an assessment', async () => {
    let assessmentDetails = {
        name: 'test',
        createdBy: mongoose.Types.ObjectId(),
    };

    return expect(Assessment.NewAssessment(assessmentDetails))
        .to.be.eventually.an('object');
);

工作正常。

关于node.js - 使用 Mockgoose/Mongoose 通过 Mocha 和 Chai-Expect 保存/创建时超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55701446/

相关文章:

node.js - 如何以 Angular 循环多个http post请求?

javascript - Mongoose findByIdAndUpdate 成功更新文档但出现错误

java - 对退出应用程序的 Java 构造函数进行单元测试

javascript - 具有 scss 的 node_module 上出现 Gulp 错误

angularjs - 在 MEAN 应用程序的 API 路由上找不到 404?

java - 单元测试应该测试依赖交互吗?

java - JUnitParamsRunner 与 Guice

javascript - 异步函数的 Mocha 测试

javascript - 如何在 mocha/sinon 中测试条件表达式

javascript - 使用 Karma 和 Mocha 进行异步测试