Während grunt test
auf einem Yeoman (1.0RC1) gerüstet Angular (1.0.7) App laufen, bekomme ich die folgende Fehler:
TypeError: 'undefined' is not a function (evaluating '$scope.$parent.userLoggedIn(true)')
userLoggedIn()
ist in einem übergeordneten Steuergerät index.js
. Die Funktion selbst läuft innerhalb der eckigen App gut.
Dieser Fehler tritt nicht auf anderen booleschen Variablen oder Zeichenfolgenvariablen im Controller auf, sodass er direkt mit dem Aufrufen von Funktionen in einem übergeordneten Element in Beziehung steht.
Ich denke, dass ich entweder $scope.$parent
den falschen Weg benutze oder dass ich meine index.js
Controller im Test definieren muss, aber Karma Test Dokumentation ist sporadisch, so ist es schwer zu wissen.
EDIT: Hier ist die Steuerung:
'use strict';
angular.module('uiApp')
.controller('LookupCtrl', ['$scope', function ($scope) {
$scope.awesomeThings = [
'HTML5 Boilerplate',
'AngularJS',
'Karma'
];
$scope.$parent.userLoggedIn(true);
}]);
Hier wird der Test.
'use strict';
describe('Controller: LookupCtrl', function() {
// load the controller's module
beforeEach(module('uiApp'));
var LookupCtrl,
scope;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
LookupCtrl = $controller('LookupCtrl', {
$scope: scope
});
}));
it('should attach a list of awesomeThings to the scope', function() {
expect(scope.awesomeThings.length).toBe(3);
});
});
(Ja, ich weiß, ich bin gerade jetzt den Standard-awesomeThings
Test Ich bin neu zu eckigen Tests).
Könnten Sie bitte Ihren Code für den Testcontroller angeben. – BKM
Im Allgemeinen bedeutet das nur, dass Sie versuchen, einen Eigenschaftsnamen zu verwenden, um eine Funktion zu finden, aber das Objekt, mit dem Sie arbeiten, hat keine solche Eigenschaft. Sie versuchen also, "undefined" als Funktion zu verwenden, und das ist keine Funktion. – Pointy