Это работает для меня. Например, используя chai для утверждений.
const chai = require('chai');
const expect = chai.expect;
describe('test', function () {
function generateException() {
throw new Error('test error');
}
it('should give an error', async ()=> {
try {
await generateException();
expect(true).to.be.false;
} catch(err) {
console.log(err.message);
expect(err.message).to.equal('test error');
}
})
})
Кажется, есть разница в способе использования Promise.reject()
против throw new Error()
. Когда функция generateException
выдает ошибку, ваши тесты работают.
Однако, если он был Promise.reject()
, он никогда не попадет в блок catch.
Если вы сделаете что-то вроде let result = await generateException();
, вы увидите, что это ожидаемая ошибка, если функция geenerateException
использует отклонение обещания.
Вы можете связать обещания с ожиданием, если захотите.
function generateException() {
return new Promise(reject => {
return reject(new Error('Promise Rejected');
})
it('should give an error', async ()=> {
await generateException().catch(error => {
expect(error.message).to.equal('Promise Rejected');
})
});
Чтение частей этой статьи об асинхронном коде может немного помочь.