我在我的子控制器中调用函数 $ scope.getManagerDetails()。当我运行子控制器的测试文件时,我得到 $ scope.getManagerDetails不是函数错误.Here ManagerController是父控制器,另一个是子控制器。请帮助。提前谢谢
1)经理控制员
(function(angular){
'use strict'
angular.module('APP').controller('managerCtrl',managerController);
managerController.$inject=['$scope'];
function managerController($scope){
$scope.getManagerDetails = function(){
//some logic
}
}
})(window.angular)
2)员工控制员
(function(angular){
'use strict'
angular.module('APP').controller('employeeCtrl',employeeController);
employeeController.$inject=['$scope'];
function employeeController($scope){
console.log($scope.getManagerDetails())
}
})(window.angular)
3)测试员工控制器
describe('Employee Controller',function(){
var $scope,
$rootScope,
$injector,
$controller,
employeeController;
beforeEach(module('APP'));
beforeEach(inject(function(_$rootScope_,_$injector_,_$controller_){
$rootScope = _$rootScope_;
$injector = _$injector_;
$controller = _$controller_;
$scope = $rootScope.$new();
employeeController = $controller('employeeCtrl',{
$scope:$scope
});
}));
it('should have controller be defined',function(){
expect(employeeController).toBeDefined();
})
})
答案 0 :(得分:1)
getManagerDetails()
未在Employee Controller中定义(它在Manager Controller中定义),因此您可能希望模拟该函数以及Employee Controller所具有的任何其他依赖项。 e.g。
$scope = $rootScope.$new();
$scope.getManagerDetails = angular.noop;
话虽如此,嵌套这样的控制器并依赖范围继承并不是最佳实践。最好创建一个带有隔离范围的指令,以封装Employee Controller和相关HTML中的所有内容。