Я изо всех сил пытаюсь разработать лучший способ проверить, что обещание отклонено в тесте Mocha при использовании async/wait.
Вот пример, который работает, но мне не нравится, что should.be.rejectedWith
возвращает обещание, которое должно быть возвращено из тестовой функции для правильной оценки. Использование async/await устраняет это требование для тестирования значений (как я делаю для результата wins()
ниже), и я чувствую, что, вероятно, я забуду оператор возврата в какой-то момент, и в этом случае тест всегда будет проходить,
// Always succeeds
function wins() {
return new Promise(function(resolve, reject) {
resolve('Winner');
});
}
// Always fails with an error
function fails() {
return new Promise(function(resolve, reject) {
reject('Contrived Error');
});
}
it('throws an error', async () => {
let r = await wins();
r.should.equal('Winner');
return fails().should.be.rejectedWith('Contrived Error');
});
Похоже, должно быть возможно использовать тот факт, что async/await переводит отказ на исключения и объединяет это с Chai should.throw, но я не смог определить правильный синтаксис.
В идеале это сработает, но не похоже:
it('throws an error', async () => {
let r = await wins();
r.should.equal('Winner');
(await fails()).should.throw(Error);
});