как рекомендуется изменять время ожидания по умолчанию глобально или только для одного теста? mocha

#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. «А что, если на другом сервере время ожидания не потребуется?» <= Я не уверен, о чем вы спрашиваете