Для тестирования того, что функция выбрасывает ошибку при определенных условиях, используя Jest, вы можете использовать метод .toThrow(). Вот как это работает:
- Оберните вызов функции в другую функцию: Это необходимо, потому что Jest должен выполнить функцию, чтобы поймать ошибку. Вы можете использовать стандартный синтаксис функции или синтаксис стрелочной функции.
- Напишите тестовый случай и утверждение: Как обычно, но вместо прямого вызова функции в утверждении, передайте созданную вами обертку.
- Добавьте метод
.toThrow(): В конце утверждения добавьте метод.toThrow(). Если функция выбрасывает ошибку, тест пройдет. Если нет, тест провалится.
Пример:
Предположим, у вас есть функция myFunction, которая выбрасывает ошибку, если ей передается неверный тип:
function myFunction(type) {
if (typeof type !== 'string') {
throw new TypeError('Invalid type');
}
// Остальная логика функции
}Теперь вы можете написать тест, чтобы убедиться, что эта функция действительно выбрасывает ошибку при передаче неверного типа:
test('throws on invalid type', () => {
const wrapperFunction = () => {
myFunction('invalidType');
};
expect(wrapperFunction).toThrow(TypeError);
});Пояснение:
- Создание обертки: Создаем функцию
wrapperFunction, которая вызываетmyFunctionс аргументом'invalidType'. - Написание теста: В тесте используем
expect(wrapperFunction).toThrow(TypeError), чтобы утверждать, чтоwrapperFunctionвыбрасывает ошибку типаTypeError.
Проверка конкретного сообщения об ошибке:
test('throws on invalid type with specific message', () => {
const wrapperFunction = () => {
myFunction('invalidType');
};
expect(wrapperFunction).toThrow('Invalid type');
});Проверка выброса ошибки без указания типа:
test('throws on invalid type without specifying error type', () => {
const wrapperFunction = () => {
myFunction('invalidType');
};
expect(wrapperFunction).toThrow();
});Этот подход позволяет вам тестировать выброс ошибок в вашем коде, гарантируя, что ошибки выбрасываются и обрабатываются правильно при определенных условиях.