проверка mocha async / await завершилась с таймаутом - PullRequest
0 голосов
/ 28 декабря 2018

Я хотел бы проверить асинхронные коды с Mocha.

Я следовал этому уроку testing-promises-with-mocha .В конце концов, он говорит, что лучший способ - асинхронное ожидание.

Ниже приведен мой код, я намеревался установить setTimeout дольше, чем по умолчанию Mocha.

describe('features', () => {
  it('assertion success', async() => {
    const resolvingPromise = new Promise( resolve => {
      setTimeout(() => {
        resolve('promise resolved')
      }, 3000)
    })

    const result = await resolvingPromise
    expect(result).to.equal('promise resolved')
  })
})

Мокко выдает мне ошибку следующим образом:

Error: Timeout of 2000ms exceeded. For async tests and hooks, 
ensure "done()" is called; if returning a Promise, ensure it resolves...

Как разрешитьошибка?Простой набор mocha --timeout 10000 длиннее?

Спасибо за ваше время!

Mocha: 5.2.0
Chai: 4.2.0

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Мокко имеет контроль времени ожидания. Мокко документы

Синтаксис:

it('should take less than 500ms', function(done) {
  this.timeout(5000); // 5 seconds
  setTimeout(done, 3000);
});

Ваш пример:

describe('features', () => {
  it('assertion success', async (done) => {
    this.timeout(5000);
    const resolvingPromise = new Promise(resolve => {
      setTimeout(() => resolve('promise resolved'), 3000)
    });

    const result = await resolvingPromise();
    expect(result).to.equal('promise resolved');
    done();
  });
});
0 голосов
/ 28 декабря 2018

Для асинхронных тестов вы должны вызвать обратный вызов done().

describe('features', () => {
  it('assertion success', async(done) => { // pass done here
    const resolvingPromise = new Promise( resolve => {
      setTimeout(() => {
        resolve('promise resolved')
      }, 3000)
    })

    const result = await resolvingPromise
    expect(result).to.equal('promise resolved')
    done() // invoke at end
  })
})
...