范围函数在角度茉莉花测试中给出未定义的错误

时间:2016-03-24 18:30:48

标签: angularjs karma-jasmine

我在我的子控制器中调用函数 $ 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();
    })

})

1 个答案:

答案 0 :(得分:1)

getManagerDetails()未在Employee Controller中定义(它在Manager Controller中定义),因此您可能希望模拟该函数以及Employee Controller所具有的任何其他依赖项。 e.g。

$scope = $rootScope.$new();
$scope.getManagerDetails = angular.noop;

话虽如此,嵌套这样的控制器并依赖范围继承并不是最佳实践。最好创建一个带有隔离范围的指令,以封装Employee Controller和相关HTML中的所有内容。