Я пытаюсь протестировать файл 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();
});
});