Тестирование типа исключения в Jest: советы и руководство
Быстрый ответ
Для проверки типа выбрасываемого исключения в Jest используйте метод .toThrow(Type). Оберните вызов вашей функции в expect() вот так:
expect(() => yourFunction()).toThrow(ExpectedError);
Проверьте, что ExpectedError — это класс ожидаемой ошибки. Это утверждение позволит проверить, выбрасывает ли функция yourFunction() исключение указанного класса.

Прогулка по тестированию ошибок с Jest
Магия toThrow
Проверка типов исключений может быть расширена до проверки конкретных сообщений об ошибках. Это обеспечит детальную проверку обработки исключений:
expect(() => riskyBusiness()).toThrowError(/ожидаемое сообщение об ошибке/);
Использование регулярных выражений позволяет точно определить сопоставление с конкретными частями сообщения об ошибке, повышая тем самым гибкость при проверке.
Отлов ошибки в асинхронном коде
При тестировании асинхронного кода используйте синтаксис async/await и конструкцию .rejects для эффективной проверки асинхронных исключений:
await expect(asyncOperation()).rejects.toThrow(ExpectedAsyncError);
Нам не следует игнорировать необходимость тестирования асинхронных функций, будьте внимательны при обработке типов исключений и отдельных сообщений об ошибках.
Проверка конкретного числа утверждений
Для уверенности, что в тесте было выполнено задуманное число утверждений, используйте expect.assertions(number):
test('баланс между порядком и хаосом', () => {
expect.assertions(1);
expect(() => questionableMethod()).toThrow(PredictableError);
});
Этот подход помогает контролировать вызовы expect, убеждаясь, что они не остаются без внимания, особенно при тестировании асинхронного кода.
Игра в отлов ошибок с try/catch
Хотя метод toThrow – мощный инструмент для тестирования, иногда требуется более тонкая ручная настройка обработки ошибок. В этой ситуации на помощь придёт блок try/catch, где можно анализировать дополнительные свойства или поведение исключений:
try {
possiblyBrokenFunction();
} catch (e) {
expect(e).toBeInstanceOf(ExpectedFailure);
expect(e).toHaveProperty('message', 'запланированный хаос');
}
Блок try/catch предоставляет полный контроль над процессом обработки исключений, принося удовлетворение вашему внутреннему перфекционисту.
Визуализация
Тестирование исключений в Jest можно сравнить с высеиванием ошибок из потока операций:
expect(() => processor.process(faultyItem)).toThrow(SpecificError);
В реальной жизни это можно представить так:
Поток работ: [🔧, 💾, ⚙️, 🦠, 🔗] // Объекты, проходящие через процессор
🦠: Аномалия или ошибка в процессе
🕵️♀️ Ошибка: SpecificError / TypeError // Детектив, ищущий конкретные ошибки
Поиски ошибок типа SpecificError будет выглядеть так:
Детектив от Jest: [🕵️♀️] // В поисках SpecificError
Результат: 🟢 // И вот мы обнаружили ожидаемую ошибку SpecificError!
Полезные материалы
- Expect · Jest — изучите документацию Jest, чтобы понять, как использовать
toThrowError. - instanceof – JavaScript | MDN — углубитесь в оператор
instanceofс помощью руководства MDN, который необходим для проверки типов объектов в JavaScript. - An Async Example · Jest — в этом туториале раскрываются секреты тестирования асинхронного кода с помощью Jest.
- javascript – How to test the type of a thrown exception in Jest – Stack Overflow — присоединитесь к обсуждению на Stack Overflow, где можно обменяться практическим опытом тестирования исключений в Jest.
- Expect · Jest — научитесь создавать настраиваемые проверки для уникальных тестов исключений с помощью Jest.
- try...catch – JavaScript | MDN — освойте искусство обработки исключений в JavaScript с помощью конструкции
try...catch. - rejects.toThrowError · Issue #3601 · jestjs/jest · GitHub — станьте участником обсуждения на GitHub, где разработчики Jest обмениваются мнениями о возможностях фреймворка для работы с исключениями и промисами.


