/ / Fonction d'injection dans angularjs - angularjs, jasmine

Fonction d'injection dans angularjs - angularjs, jasmine

Je suis en train de tester angularjs controller avec jasmine, karma .... l’échantillon de test ressemble à ceci:

     beforeEach(inject(function(_$rootScope_, _$controller_){
$rootScope = _$rootScope_;
$scope = $rootScope.$new();
$controller = _$controller_;
$controller("AboutController", {"$rootScope" : $rootScope, "$scope": $scope});
}));

Ici, je suis confus comment le jasmin a-t-il appris à connaîtreà propos de la fonction d'injection? Est-ce le même objet de fonction que angular "s Injector.inject () ... Je suis surpris, la méthode est disponible en dehors de l’espace-noms angulaire ... et que fait le $ contrôleur variable injectée dans la fonction faire?

Réponses:

2 pour la réponse № 1

la inject la fonction fait partie de la Paquet Angular Mocks (ngMock). Vous avez probablement ajouté ceci à votre fichier karma.conf.js afin de configurer les tests jasmine. Donc, cette façon d’injecter est ne pas disponible en code angulaire de production, il est uniquement utilisé pour les tests unitaires.

Ce paquet ajoute inject à l’objet window (global) pour plus de commodité lors des tests.

De la documentation:

REMARQUE: Cette fonction est également publiée sur la fenêtre pour un accès facile.

Pour plus d'informations voici la documentation.

Quant à la deuxième question: le $controller service vous permet d’initialiser un contrôleur nommé ("AboutController" dans votre exemple) et transmettez-le dans ses dépendances. $scope est souvent nécessaire lors du test des contrôleurs.