web-dev-qa-db-fra.com

Comment tester un changement $ scope.watch (AngularJS) dans Jasmine?

J'ai récemment commencé à écrire quelque chose avec AngularJS et je ne sais pas trop comment écrire un test pour cette chose en particulier. Je crée un mode "Demande d'aide" qui a différents états. Donc, dans mon contrôleur, j'utilise une variable $ scope.request_mode. Les différents liens pour activer les demandes d'aide définissent cette variable différemment.

Ensuite, dans ma directive, je fais une $scope.$watch('request_mode', function(){...}); pour activer ou désactiver sélectivement les choses lorsque le mode de demande change. Le code fonctionne très bien, mais le problème que j'ai est avec les tests. Je n'arrive pas à convaincre Jasmine de prendre le $scope.$watch et déclenche quoi que ce soit quand il change.

Je suis sûr que quelqu'un est déjà tombé dessus, donc toute suggestion serait très appréciée.

36
Mike Pelletier

Dans vos tests unitaires, vous devez manuellement appeler $scope.$digest() ou $scope.$apply() pour déclencher $scope.$watch().

Normalement, dans votre code, vous n'auriez pas à le faire, car des directives comme ng-click faire $rootScope.$apply pour vous dans les coulisses.

92
g00fy