Как проверить, выбрано ли исключение в AngularJS
Мне нужно проверить директиву, и она должна выдать исключение. Как я могу проверить, что исключение было выбрано, в жасмине?
Функция ссылок директив:
link: function() {
if(something) {
throw new TypeError('Error message');
}
}
Я еще не успешно реализовал тест, который действительно улавливает ошибку и сообщает, что тест прошел успешно.
Ответы
Ответ 1
Вот как я это делаю:
describe("myDirective", function() {
it("should throw an error", inject(function ($compile, $rootScope) {
function errorFunctionWrapper()
{
$compile(angular.element("<div my-directive></div>"))($rootScope);
}
expect(errorFunctionWrapper).toThrow();
}));
});
Ответ 2
it("should throw an error", inject(function ($compile, $rootScope) {
expect(function () {
$compile(angular.element("<directive-name></directive-name>"))($rootScope.$new());
}).toThrow();
}));
Ответ 3
EDIT: теперь это исправлено. Протестировано с помощью Angular 1.6.4.
В Angular 1.6 я не смог поймать ошибки, возникшие во время фазы $compile
. Хотя это не так элегантно, я все же могу проверить массив $exceptionHandler.errors
(источник):
it('throws an error', function() {
$compile(angular.element('<directive-name></directive-name>'))($rootScope.$new());
expect($exceptionHandler.errors.length).toBeGreaterThan(0);
});
Еще лучше, предоставьте ему точные сообщения об ошибках:
expect($exceptionHandler.errors).toEqual(['first error', 'second error'])
Ответ 4
Обработка исключений в angular лучше выполнять с помощью службы angular
https://docs.angularjs.org/api/ng/service/$exceptionHandler
это дает лучшую обработку отброшенных исключений и обеспечивает лучший родной способ angular для обработки исключения по всему миру. скажем, если в какой-то момент вы можете изменить стратегию обработки исключений вашего приложения в одном месте.
при тестировании этого при использовании вместе с $exceptionHandlerProvider
https://docs.angularjs.org/api/ngMock/provider/$exceptionHandlerProvider
дает вам лучший дескриптор генерируемого исключения и записывает конкретные тесты.
для модульных тестов это не стандартный способ в angular для проверки исключения с использованием .toThrow(); метод жасмина.