Я тестирую код моего компонента реагирования, который проверяет, все ли мои обещания были разрешены правильно, и если нет, выдает ошибку, которая будет обнаружена гораздо более высокой границей ошибки уровня. Код выглядит следующим образом, однако мой тест не проходит, так как кажется, что моя функция не throw. Код следующий:
const callA = Promise.resolve();
const callB = Promise.reject();
function doSomething() {
Promise.all([
callA,
callB,
]).catch(() => {
throw new Error('oops');
})
}
test('do something throws correctly', () => {
expect(() => {
doSomething();
}).toThrow();
});
Результат:
(node:516) UnhandledPromiseRejectionWarning: Error: oops
(node:516) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of anasync function without a catch block, or by rejecting a promisewhich was not handled with .catch(). (rejection id: 2)
(node:516) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zeroexit code.
FAIL ./sum.test.js
✕ do something throws correctly (16ms)
● do something throws correctly
expect(received).toThrow()
Received function did not throw
15 | expect(() => {
16 | doSomething();
> 17 | }).toThrow();
| ^
18 | });
Я понимаю, что моя ошибка может быть исправлена, если я добавлю перехват в тест после doSomething()
, однако это не суть теста. Я просто пытаюсь проверить, что doSomething сгенерирует в этом сценарии, что, кажется, так и есть. Как / почему Jest не передает expect
того, что он должен бросить, и как это исправить?