Mam kontroler z detektorem zdarzeń w mojej aplikacji Angular, zdefiniowany w następujący sposób.
angular.module('test').controller('TestCtrl', function($rootScope, $scope, testService) {
[...]
$scope.$on("myEvent", function(args, value) {
testService.doStuff(value);
});
});
Działa to doskonale w samej aplikacji. Jednak przy próbie badanej jednostki funkcjonalność kontrolera (przy Jasmine i Karma), każda metoda badania zgłasza następujący błąd:
TypeError: $scope.$on is not a function in [...]/testController.js
tworzę kontroler w moich metodach badań w następujący sposób.
it('does stuff', inject(function($rootScope, $controller, testService) {
var scope = $rootScope.$new;
$controller('TestCtrl', {
$scope : scope
});
[...]
}));
mogę ominąć ten problem poprzez zmianę mojego kontrolera użyć rootScope
zamiast:
$rootScope.$on(...)
ale to oczywiście aplikacja nie działa już prawidłowo. Mogę również pozbyć się błędów poprzez wprowadzenie metody $on
w moim kodu testu:
var scope = $rootScope.$new;
scope.$on = function() {};
ale szyderczy słuchacza jak tego rodzaju porażek celów testowania mój prawdziwy kod.
Dlaczego nie kod próba znalezienia sposobuscope
$on
? (Ale znajdzie to na rootScope
, nadal ...)
Musi być coś fundamentalnego, czego tu brakuje, ale nie byłem w stanie tego rozgryźć nawet po wielu logowaniu się i czytaniu kodu źródłowego Angulara .
dziękuję! To był naprawdę żenujący błąd ... (Argh!) Nie wiem, dlaczego napisałem tak, ale błąd spowodował zainfekowanie wszystkich moich testów. – MJV