Опитвам се да тествам AngularJS файл, но той не може да извика метод, дефиниран в друг контролер.
Във файла MyPage:
angular.module('MyApplication').controller('MyPageCtrl', function ($scope, $rootScope) {
if($scope.pageChecker) {
$scope.doSomething();
}
}
Методът pageChecker() е дефиниран в App.js, в контролера MyApplication, и връща true или false.
За пълнота:
$scope.pageChecker = function() {
if(cookieCheck) {
return true;
}
else {
return false;
}
};
Файлът жасмин е:
describe("Page check", function(){
beforeEach(angular.mock.module('MyApplication'));
beforeEach(angular.mock.inject(function ($rootScope, $controller) {
var $scope = $rootScope.$new();
$controller('MyPageCtrl', { $scope: $scope});
}));
it("should call $scope.doSomething", function(){
spyOn($scope, "doSomething");
$scope.doSomething();
expect($scope.doSomething).toHaveBeenCalled();
});
});
Получавам „TypeError: „undefined“ не е функция (оценявайки „$scope.pageChecker()“)
Искам да отменя метода pageChecker, за да връща винаги true. Как да направя това?
РЕДАКТИРАНЕ: Благодарение на Dskh, имам своя отговор, с още една настройка от мен:
describe("Page check", function(){
var $scope; //declare here, else it is a local variable inside the beforeEach
beforeEach(angular.mock.module('MyApplication'));
beforeEach(angular.mock.inject(function ($rootScope, $controller) {
$scope = $rootScope.$new();
// define the overriding methods here
$scope.pageChecker = function(){
return true;
};
// end overriding methods here
$controller('MyPageCtrl', { $scope: $scope});
}));
it("should call $scope.doSomething", function(){
spyOn($scope, "doSomething");
$scope.doSomething();
expect($scope.doSomething).toHaveBeenCalled();
});
});