#javascript #mocha.js #ecmascript-2016
#javascript #mocha.js #ecmascript-2016
Вопрос:
Я использую before
перехват с try catch
блоком для вызова некоторой функциональности внутри моего блока try. Таким образом, before
блок выполняется перед каждым it
.
describe('Function response', ()=> {
// this.timeout(5000); //here
let response;
before(async () => {
// this.timeout(500000); //or here
try {
response = await myFunction(argument);
} catch (err) {
assert.fail(err);//seems doesn't work
}
});
it('function response to be an array', () => {
expect(response).to.be.an('array');
});
});
Я получаю эту ошибку
Ошибка: превышен тайм-аут в 2000 мс. Для асинхронных тестов и перехватов убедитесь, что вызывается «done()»; если возвращается обещание, убедитесь, что оно выполняется.
После открытия одного из комментариев, которые изменяют тайм-аут по умолчанию, после, конечно, перевода функций со стрелками в обычный режим, тест работает так, как ожидалось.
Я хотел бы знать, какова наилучшая практика. Может быть, лучше изменить время ожидания по умолчанию в test
скрипте?
"test": "mocha -r ts-node/register src/**/*.spec.ts --timeout 5000
Также, возможно, я неправильно обрабатываю ошибку в catch
блоке?
Ответ №1:
Лучшая практика — устанавливать время ожидания в необходимой области:
describe('something', function() {
this.timeout(100); // sets the timeout for everything in "describe"
before(function(done) {
this.timeout(500); // sets the timeout ONLY for "before"
setTimeout(done, 450); // <= this works
});
it('should do something', function (done) {
setTimeout(done, 150); // <= this times out
});
});
- Если вам нужен определенный тайм-аут для всех ваших тестов, установите его на глобальном уровне
- Если вам нужен определенный тайм-аут для всего в
describe
, установите его вdescribe
- Если вам нужен определенный тайм-аут для одного
before
,it
и т.д., Установите его в этой функции
Комментарии:
1. … и вы
catch
не поймаетеtimeout
ошибку, потому что она выдаетсяmocha
, а не вашим тестовым кодом.2. как насчет функций со стрелками? Я бы не хотел переписывать их в обычные функции
3. А что, если на другом сервере тайм-аут не понадобится?
4. «Передача функций со стрелками (также известных как «лямбды») в Mocha не рекомендуется». — лучшая практика с
mocha
— использовать обычные функции5. «А что, если на другом сервере время ожидания не потребуется?» <= Я не уверен, о чем вы спрашиваете