Использование toThrowError в Жасмине
Я работаю над приложением, которое активно использует JavaScript. Мне нужно проверить этот код. Для этого я полагаюсь на Жасмин.
некоторые из моего кода JavaScript генерирует объекты ошибок JavaScript. Эти объекты присваивают значения свойству message и name объекта Error. Я назначаю тип исключения свойству name. Например, иногда имя имеет значение "OutOfRangeException", иногда его" ArgumentException " и т. д.
Как использовать функция toThrowError в структуре Jasmine для проверки, имеет ли брошенная ошибка определенное имя? В настоящее время мой JavaScript выглядит следующим образом:
function getRandomNumber(max) {
if ((!isNaN(parseFloat(max)) && isFinite(max)) === false) {
var error = new Error('You must provide a number');
error.name = 'ArgumentException';
throw error;
}
if ((max === null) || (max < 1) || (max > 100)) {
var error = new Error('The maximum value must be greater than 0 and less than 100.');
error.name = 'ArgumentOutOfRangeException';
throw error;
}
return Math.floor(Math.random() * max) + 1;
}
function ArgumentException(message) {
this.name = 'ArgumentException';
this.message = message || '';
}
ArgumentException.prototype = new Error();
ArgumentException.prototype.constructor = ArgumentException;
Как я могу написать тест Jasmine, который проверяет ошибку ArgumentException или ошибку ArgumentOutOfRangeException?
спасибо!
2 ответов
проверка исключения для функции с параметром не поддерживается в jasmine. Но вы можете использовать ниже обходной путь, чтобы преодолеть это ограничение и протестировать функции.
describe('toThrowError test case', function() {
it('test getRandomNumber function for undefined', function() {
expect(function() {
getRandomNumber(undefined);
}).toThrowError("You must provide a number");
});
it('test getRandomNumber function for 0', function() {
expect(function() {
getRandomNumber(0);
}).toThrowError("The maximum value must be greater than 0 and less than 100.");
});
});
toThrowError
matcher принимает 1 или 2 параметра
- 1 параметр - сообщение об исключении или тип исключения
- 2 параметра - тип исключения и сообщение об исключении
пример для проверки на основе исключений тип:
function getRandomNumber(max) {
throw new SyntaxError();
}
describe('toThrowError test case', function() {
it('test getRandomNumber function for undefined', function() {
expect(function() {
getRandomNumber(undefined);
}).toThrowError(SyntaxError);
});
});
см. ссылке для различных типов исключений.
Сообщение Об Ошибке
ниже упомянутый фрагмент дает образец для использования пользовательских сообщений об ошибках.
function getRandomNumber(max) {
throw new ArgumentException();
}
function ArgumentException(message) {
this.name = 'ArgumentException';
this.message = message || '';
}
ArgumentException.prototype = new Error();
ArgumentException.prototype.constructor = ArgumentException;
describe('toThrowError test case', function() {
it('test getRandomNumber function for undefined', function() {
expect(function() {
getRandomNumber(undefined);
}).toThrowError(ArgumentException);
});
});
Если вы хотите пройти тест, как только ваш метод выдает ошибку. Тогда вы могли бы использовать try-catch
блок и когда вы достигнете catch
блок, вы ожидаете, что ваш тест будет пройден.
function ErrorFunction(args:any[]) {
throw new Error('An error message');
}
describe('Testing a function that throws an error',()=>{
it('should throw an Error',()=>{
try {
ErrorFunction(args)
} catch (e) {
expect(true).toBeTruthy();
}
})
})