Тест по вашему примеру не пройдет.В mocha тест завершится неудачей, если функция, вызываемая в тесте, выдаст исключение.Пример:
const assert = require('assert');
function foo() {
throw new Error('err');
}
describe('test', () => {
it('works', async () => {
foo();
console.log('came here');
});
});
$ npx mocha test.js
test
1) works
0 passing (6ms)
1 failing
1) test
works:
Error: err
at foo (test.js:8:9)
at Context.<anonymous> (test.js:13:11)
at processImmediate (internal/timers.js:439:21)
Итак, в вашем примере, поскольку foo.hi
throws TypeError
, он будет перехвачен mocha и показан как неудачный тест (выполнение не достигнет утверждений действительноно тест все равно будет показан как проваленный.)
Я подозреваю, что в вашем случае происходит обещание или отказ от обещания, как в одном из следующих примеров:
function throwing() {
return new Promise((resolve, reject) => { throw new Error('err'); });
}
function rejecting() {
return new Promise((resolve, reject) => { reject(new Error('err')); });
}
describe('test', () => {
it('works', async () => {
throwing();
rejecting();
console.log('came here');
});
});
$ npx mocha test.js
test
came here
✓ works
[some UnhandledPromiseRejectionWarnings here]
1 passing (6ms)
Оба не будут перехвачены тестом, поскольку функция выполняется успешно, возвращая обещание, и тестовый блок завершается, но сбой происходит позже.Если ваша функция возвращает обещание, просто await
для этого в вашем тесте, чтобы убедиться, что вы получите результат обещания:
describe('test', () => {
it('works', async () => {
await throwing();
await rejecting();
console.log('came here');
});
});
$ npx mocha test.js
test
1) works
0 passing (6ms)
1 failing
1) test
works:
Error: err
at test.js:4:51
at new Promise (<anonymous>)
at throwing (test.js:4:10)
at Context.<anonymous> (test.js:13:11)
at processImmediate (internal/timers.js:439:21)