2013-03-11 3 views
15

Мне нужно проверить директиву, и оно должно вызвать исключение. Как я могу проверить, что исключение было выброшено, в жасмин?Как проверить, исключено ли исключение в AngularJS

Функция директивы ссылка:

link: function() { 
    if(something) { 
     throw new TypeError('Error message'); 
    } 
} 

я еще не был успешно реализован тест, который на самом деле ловит ошибку и сообщает о том, что проверка прошла успешно.

ответ

20

Это, как я это делаю:

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(); 
     })); 
}); 
+0

Спасибо, что решил! –

7
it("should throw an error", inject(function ($compile, $rootScope) { 
     expect(function() { 
      $compile(angular.element("<directive-name></directive-name>"))($rootScope.$new()); 
     }).toThrow(); 
    })); 
+4

Использование анонимной функции - гораздо более элегантное решение IMO –

2

EDIT: это, кажется, теперь исправлена. Протестировано с углом 1,6.


В угловых 1.6, я был не в состоянии поймать ошибки, возникающие во время $compile фазы. Хотя не так элегантно, я все еще могу проверить против $exceptionHandler.errors массива (source):

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']) 
0

исключение в угловых испытаниях лучше выполнять с натурным угловым обслуживанием

https://docs.angularjs.org/api/ng/service/$exceptionHandler

это дает лучшую ручку на выброшенных исключениях и обеспечивает лучший собственный угловой способ справиться с исключениями в глобальном масштабе. скажем, если в какой-то момент времени вы можете изменить стратегию обработки исключений вашего приложения в одном месте.

в тестировании это когда используется вместе с $ exceptionHandlerProvider

https://docs.angularjs.org/api/ngMock/provider/$exceptionHandlerProvider

дает лучшую ручку на сгенерированного исключения и писать специальные тесты.

для модульных испытаний это не стандартный способ в угловом выражении исключения с использованием .toThrow(); метод жасмина.