Ошибка: превышен тайм-аут в 2000 мс. Для асинхронных тестов и перехватов убедитесь, что вызвано «done()»;

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

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

Вопрос:

Попробовал использовать функцию timeout и done() для решения этой проблемы, но она не работает, показывая ошибку: превышен тайм-аут в 2000 мс. Для асинхронных тестов и перехватов убедитесь, что вызвано «done()»; ошибка.

Контроллер

 var plan_details = require('../../models/plan_details');
module.exports = function () {
return {
    getPlansList: function (request, callback) {
        plan_details.find().sort({ createdAt: -1 }).exec().then((result) => {
            log.info("Getting All Plan Details");
            callback({ status: 200, success: true, result: result });
        }).catch(err => {
            log.error("Getting error while getting all plans");
            log.error(err);
            callback({ status: 400, success: false, message: "Unable to 
            Process your Request" });
        });
    }
 }}
  

Тестовый пример

 var expect = require("chai").expect;
var request = require("request");
var PlanMgmnt = require('../routes/PlanManagement/PlanManagement')();

describe("--Plan Management API", function () {
describe("--Add Plan API", function () {
    it("--returns status 200", function (done) {
        PlanMgmnt.getPlansList({}, function(res){
            console.log(res);
        });
        // done();
    });
});});
  

В console.log не выводится разрешение.

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

1. вы заглушили plan_details.find() ?

Ответ №1:

Найдено решение, проблема была связана с подключением к MongoDB, модульные тестовые примеры не получают подключение к MongoDB, поскольку модульным тестовым случаям не удавалось выполнить функцию mongoose.

Чтобы устранить проблему, добавлено helper.js файл, добавил код подключения mongoose в этот файл, использовал helper.js файл в тестовой команде «test»: «mocha test —require helper.js «.

Или cam также использует пакет mongo-unit.

Ссылки:https://www.toptal.com/nodejs/integration-and-e2e-tests-nodejs-mongodb

Ответ №2:

done() следует поместить внутрь, как показано ниже:

 describe("--Add Plan API", function () {
    it("--returns status 200", function (done) {
        PlanMgmnt.getPlansList({}, function(res){
            console.log(res);
            done();
        });
    });
});
  

Надеюсь, это поможет

Ответ №3:

вы можете установить тайм-аут для каждого набора или каждого теста

 describe('suite descripion', function(){
  this.timeout(15000);

it('test description', function(done){
  this.timeout(15000);
});
});
  

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

1. Тайм-аут — неправильное решение, мы не можем гарантировать, что тестовые случаи выполнялись должным образом или нет.