Comment puis-je tester les événements angulaire?
J'ai besoin de tester que les événements d'obtenir correctement émise ou diffusée, et de déclencher des événements manuellement.
Quelle est la meilleure façon de le faire?
Vous devez vous connecter pour publier un commentaire.
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
-ed), 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:Si vous n'avez pas besoin ou ne veulent pas à vous soucier de la arguments qui sont passés à la
$emit
, vous pouvez mettre un$on
sur le$rootScope
et de définir un indicateur de connaître l'événement a été émise. Quelque chose comme ceci: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 lainject
fonction et ensuite envoyer l'événement souhaité.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ère que cette aide.
jasmine.objectContaining
. À partir de la documentation: le jasmin.objectContaining est pour les moments où l'attente se soucie uniquement de certaines paires clé/valeur dans l'objet réel.expect(scope.$emit.calls.argsFor(0)[0]).toBe('MY_EVENT_ID');
$emit
événements. Mes tests ne laisser passer que lorsque j'utilise$rootScope.$broadcast
puis vérifiez les événements, ils ne passent pas pour$rootScope.$emit
, est-ce parce que$emit
ne peut traverser le noeud et pas lui-même et pour les enfants de nœuds?toHaveBeenCalledWith
est approprié, même pour juste vérifier si un événement a été déclenché. C'est parce que le nom de l'événement est un argument pour$emit
, voici donc le test aurait du sens.Voici les étapes à suivre pour $événement de diffusion en angular JS
Tout inijecting initialiser le rootScope et la portée de stub comme indiqué ci-dessous:
Après le contrôleur est créé élever événement à l'aide de rootScope comme ci-dessous:
Nous avons utilisé cette sintax pour A1