Простой пример использования done и setTimeout внутри теста мокко, который не работает должным образом - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть простой тест с утверждением, содержащимся в функции setTimeout следующим образом:

  it('asserts after timeout', (done) => {
    setTimeout(() => {
      expect(1).to.be.equal(1);
      done();
    }, 500);
  });

Однако я получаю следующую ошибку:

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

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

После того, как я покачал головой и посмотрел на каждый модульный тест в базе кода, я понял, что был вызов sinon.useFakeTimers ();Удаление, которое решило проблему.

0 голосов
/ 19 февраля 2019

Ваш пример должен работать.Однако вы получите эту ошибку, когда ожидание не удастся.Для этого оберните ваш setTimeout в Promise и убедитесь, что вы вызываете done в следующем методе then.

Считается, что bad practice из-за этого, чтобы поместить метод done вта же область, что и то, что вы тестируете.

it('asserts after timeout', (done) => {
    (new Promise((resolve,reject)=>{
       setTimeout(() => {
         resolve();
       }, 500);
    }))
    .then(()=>expect(1).to.be.equal(1))
    .then(()=>done(), done);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...