#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. Тайм-аут — неправильное решение, мы не можем гарантировать, что тестовые случаи выполнялись должным образом или нет.