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 № 1la 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.