В моем приложении узла я использую мокко для проверки своего кода. При вызове многих асинхронных функций с использованием mocha, я получаю ошибку тайм-аута ( Error: timeout of 2000ms exceeded.
). Как я могу решить это?
var module = require('../lib/myModule');
var should = require('chai').should();
describe('Testing Module', function() {
it('Save Data', function(done) {
this.timeout(15000);
var data = {
a: 'aa',
b: 'bb'
};
module.save(data, function(err, res) {
should.not.exist(err);
done();
});
});
it('Get Data By Id', function(done) {
var id = "28ca9";
module.get(id, function(err, res) {
console.log(res);
should.not.exist(err);
done();
});
});
});
Ответы:
Вы можете установить время ожидания при запуске теста:
Или вы можете установить таймаут для каждого набора или каждого теста программно:
Для получения дополнительной информации см. Документы .
источник
-t
. если вы используете mocha-test для запуска mocha из задачи grunt, это также поддерживается в параметре objectoptions:{timeout:15000}
.TypeError: this.timeout is not a function
при использовании"mocha": "^3.5.0"
Я считаю, что «решение» просто увеличения тайм-аутов скрывает то, что на самом деле здесь происходит, что либо
Обычно вы сталкиваетесь с # 2, когда Mocha не получает ошибок подтверждения от обратного вызова. Это вызвано тем, что какой-то другой код поглотил исключение дальше по стеку. Правильный способ справиться с этим - исправить код, а не проглотить ошибку .
Когда внешний код глотает ваши ошибки
В случае, если это библиотечная функция, которую вы не можете изменить, вам нужно отловить ошибку утверждения и передать ее в Mocha самостоятельно. Вы делаете это, оборачивая ваш обратный вызов утверждения в блок try / catch и передавая любые исключения обработчику done.
Этот шаблон, конечно, может быть извлечен в некоторую функцию полезности, чтобы сделать тест немного более приятным для глаз:
Ускорение сетевых тестов
Кроме этого, я предлагаю вам воспользоваться советом о том, как начинать использовать тестовые заглушки для сетевых вызовов, чтобы тесты проходили без необходимости полагаться на работающую сеть. При использовании Mocha, Chai и Sinon тесты могут выглядеть примерно так
См .
nise
Документы Синона для получения дополнительной информации.источник
done()
в конце обещания, и я уже высмеиваю сетевые вызовы, используя Angular$httpBackend
, но не повезло. Упаковка каждой спецификации с помощью try-catch не кажется прагматичной. Любые другие предложения? Спасибо!try.... catch...
работ вокруг ошибка в коде при испытании , а не исправить его.Немного поздно, но кто-то может использовать это в будущем ... Вы можете увеличить время ожидания теста, обновив сценарии в вашем package.json следующим образом:
"scripts": { "test": "test --timeout 10000" //Adjust to a value you need }
Запустите ваши тесты с помощью команды
test
источник
Если вы используете функции стрелок:
источник
Для меня проблема на самом деле заключалась в функции description, которая, когда она снабжена функцией стрелки, заставляет mocha пропустить тайм-аут и ведет себя не согласованно. (С помощью ES6)
так как ни одно обещание не было отклонено, я получал эту ошибку все время для разных тестов, которые не проходили внутри блока описания
Вот как это выглядит, когда не работает должным образом:
и это работает с использованием анонимной функции
Надеюсь, это поможет кому-то, моя конфигурация для выше: (nodejs: 8.4.0, npm: 5.3.0, mocha: 3.3.0)
источник
Моя проблема не отправляла ответ, поэтому он зависал. Если вы используете Express, убедитесь, что res.send (data), res.json (data) или любой другой метод API, который вы хотите использовать, выполняется для маршрута, который вы тестируете.
источник
Обязательно разрешите / отклоните обещания, используемые в тестовых примерах, будь то шпионы или заглушки, убедитесь, что они разрешают / отклоняют.
источник