使用Jasmine测试角度组件的控制器

时间:2017-07-20 07:44:48

标签: angularjs-directive jasmine angularjs-scope angularjs-components

这是我的组成部分:

const comp = {
    controller: 'gridDetailsNavigationCtrl',
    controllerAs: '$ctrl',
    templateUrl: '/Scripts/app/shared/grid/navigation/gridDetailsNavigation.html',
    bindToController: true,
    bindings: {
        viewData: '<',
        listState: '@',
        detailsState: '@',
        pagingData: '=',
        backSpinnerId: '@',
        stateParams: '<'
    }

};

这是组件控制器的一部分:

class GridDetailsNavigation {
    constructor($rootScope, $scope, $state, tipaltiConsts) {
        this._$state = $state;
        this._$scope = $scope;
        this._$rootScope = $rootScope;
        this._consts = tipaltiConsts;
    }

    $onInit() {
        ....
    }
    $onDestroy() {
        ...
    }
    goToNext() {
        ....
    }
    goToPrev() {
       ....
    }            
  }

我正在尝试测试组件及其控制器。我能够创建一个组件,甚至可以获得它的控制器范围:

 const component = compile(angular.element(template))(scope);
 scope.$digest();
 component.$onInit();
 // get controller in two different ways.
 const $ctrl = component.scope().$ctrl;
 const $ctrl2 = component.controller('gridDetailsNavigationCtrl');

我的问题是$ ctrl只返回范围属性和公共方法,例如goToNext和goToPrev未定义,$ ctrl2未定义。

我知道我可以使用$ componentController但我想要组件本身并从中获取控制器。我在这做错了什么?为什么方法无法访问?为什么第二个控制器未定义?

由于

0 个答案:

没有答案