2013-03-11 6 views
15

J'ai besoin de tester une directive, et il devrait y avoir une exception. Comment puis-je tester que l'exception a été levée, dans le jasmin?Comment tester si une exception est levée dans AngularJS

La fonction de lien directives:

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

Je n'ai pas encore mis en œuvre avec succès un test qui attire effectivement l'erreur et rapporte que le test a réussi.

Répondre

20

Voici comment je le fais:

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

Merci, qui l'a résolu! –

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

Utilisation de la fonction anonyme est une solution beaucoup plus élégante IMO –

2

EDIT: cela semble être fixé dès maintenant. Testé avec angulaire 1.6.4.


Dans angulaire 1.6, je suis été incapable de détecter les erreurs lancées pendant la phase $compile. Bien que pas aussi élégant, je ne peux toujours vérifier contre le réseau $exceptionHandler.errors (source):

it('throws an error', function() { 
    $compile(angular.element('<directive-name></directive-name>'))($rootScope.$new()); 
    expect($exceptionHandler.errors.length).toBeGreaterThan(0); 
}); 

Mieux encore, fournir le message d'erreur exact (s):

expect($exceptionHandler.errors).toEqual(['first error', 'second error']) 
0

gestion des exceptions dans le test angulaire est mieux fait avec le service angulaire natif

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

cela donne une meilleure gestion des exceptions levées et fournit une meilleure façon angulaire native de gérer les exceptions globalement. dire si, à un moment donné, vous pouvez changer la stratégie de gestion des exceptions de votre application en un seul endroit.

à tester quand utilisé avec $ exceptionHandlerProvider

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

vous donne une meilleure idée sur l'exception produite et écrire des tests spécifiques. Pour les tests unitaires, ce n'est pas un moyen standard en angulaire de valider une exception en utilisant .toThrow();

méthode de jasmin.

Questions connexes