Для тестирования того, что функция выбрасывает ошибку при определенных условиях, используя 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();
});
Этот подход позволяет вам тестировать выброс ошибок в вашем коде, гарантируя, что ошибки выбрасываются и обрабатываются правильно при определенных условиях.