簡體   English   中英

范圍函數在角茉莉花測試中給出未定義的錯誤

[英]scope function is giving not defined error in angular jasmine testing

我在子控制器中調用函數$scope.getManagerDetails() 。當我為子控制器運行測試文件時,我得到$scope.getManagerDetails 不是函數錯誤。這里 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();
    })

})

getManagerDetails()未在 Employee Controller 中定義(它在 Manager Controller 中定義),因此您可能希望模擬該函數以及 Employee Controller 具有的任何其他依賴項。 例如

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

話雖如此,像這樣嵌套控制器並依賴范圍繼承並不是最佳實踐。 最好創建一個具有獨立作用域的指令來封裝 Employee Controller 和關聯的 HTML 中的所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM