Тайм-аут при использовании Mockgoose / сохранения / создания Мангуста с мокко и чаем-Ожидать

#node.js #unit-testing #mocha.js #chai #mockgoose

#node.js #модульное тестирование #mocha.js #чай #mockgoose

Вопрос:

Я получаю тайм-аут при выполнении модульных тестов с Mocha , Chai и Mockgoose

У меня есть функция Assessment.NewAssessment(assessmentDetails) , которая сохранит оценку в БД.

ПРИМЕЧАНИЕ: `Оценка.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.
 

Что я здесь делаю не так?

Комментарии:

1. Где это заканчивается? На каком этапе?

2. Первый тест проходит правильно, он останавливается на втором тесте, вызов функции Assessment.NewAssessment(assessmentDetails)

3. Я не могу выполнить ваш код и протестировать его, поэтому в качестве непроверенного предложения я бы сказал, попробуйте удалить return из этой функции и вызвать done() после expect инструкции. Кроме того, вы возвращаете обещание NewAssessment ?

4. Это асинхронная функция, я добавлю ее в вопрос

5. Я пытался использовать done() то же самое, тайм-аут

Ответ №1:

Я не знаю почему, но с этим:

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

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

Он работает нормально.