#javascript #jestjs
#javascript #jestjs
Вопрос:
У меня есть простая функция, которая выдает ошибку, если ввод меньше 0:
export const hoursMinutesSecondsFromSeconds = (inputSeconds) => {
if (inputSeconds < 0) {
throw new Error('illegal inputSeconds < 0');
}
let rem = Math.abs(inputSeconds);
let divisor = 3600;
const result = [];
while (divisor >= 1) {
result.push(Math.floor(rem / divisor));
rem = rem % divisor;
divisor = divisor / 60;
}
return resu<
};
Я пытаюсь протестировать эту функцию с помощью ввода, значение которого меньше 0, например:
import { hoursMinutesSecondsFromSeconds } from './timetools';
describe('hoursMinutesSecondsFromSeconds', () => {
it('throws error', () => {
expect(hoursMinutesSecondsFromSeconds(-2)).toThrowError('illegal inputSeconds < 0');
});
});
Но, когда я запускаю этот тест, тест завершается неудачно, и я получаю сообщение об ошибке:
Error: illegal inputSeconds < 0
Почему это не проходит тест, когда выдает ошибку точно так, как я ожидаю, что она появится в моем тесте?
Ответ №1:
В JavaScript невозможно обработать ошибку, которая была вызвана like expect(hoursMinutesSecondsFromSeconds(-2))
, не обернув ее с try..catch
помощью .
toThrowError
предполагается, что он используется с функцией, которая внутренне оборачивается try..catch
при ее вызове. Это должно быть:
expect(() => hoursMinutesSecondsFromSeconds(-2)).toThrowError('illegal inputSeconds < 0');
Ответ №2:
Глядя на: https://jestjs.io/docs/en/expect#tothrowerror Я ожидаю, что вам нужно обернуть вызов вашей функции в функцию.
Нравится:
expect(() => {
hoursMinutesSecondsFromSeconds(-2);
}).toThrowError('illegal inputSeconds < 0');