Тестирование типа исключения в 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 обмениваются мнениями о возможностях фреймворка для работы с исключениями и промисами.