66 votes

Comment puis-je tester des événements en angulaire?

Je dois vérifier que les événements sont correctement émis ou diffusés et déclencher les événements manuellement.

Quelle est la meilleure façon de faire cela?

121voto

dnc253 Points 11784

Si vous avez juste besoin d'un peu de tests sur le cas de la cuisson et de la capture, c'est comment je le fais. Pour s'assurer qu'un certain événement est déclenché ($emit-ed ou $broadcast-ndlr), un espion est le chemin à parcourir. Vous avez besoin d'une référence à la portée qui sera l'appel de la $emit ou $broadcast, et puis il suffit de faire quelque chose comme ceci:

spyOn(scope, "$emit")
//run code to test
expect(scope.$emit).toHaveBeenCalledWith("MY_EVENT_ID", other, possible, args);

Pour tester la fonctionnalité qui s'exécute lorsqu'un événement est capturé ($on), c'est un peu plus facile. Juste obtenir un $rootScope de la inject fonction et ensuite envoyer l'événement souhaité.

$rootScope.$broadcast("EVENT_TO_TEST", other, possible, args);
//expects for event here

Maintenant, j'imagine que cette la gestion des événements de la suite des évènements dans une directive ou d'un contrôleur (ou les deux) Pour la mise en place de la directive tests, voir https://github.com/vojtajina/ng-directive-testing. Pour la configuration de contrôleur de tests, voir https://github.com/angular/angular-phonecat/blob/master/test/unit/controllersSpec.js#L27

Espérons que cette aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X