单元测试 Angular 指令,控制器运行两次,第一次范围错误

Unit testing Angular directive, controller runs twice, first time with wrong scope

这很奇怪。

我有一个基本如下所示的指令:

    function Toolbar() {
    return {
        scope:{
            resultType: '=',              
        },
        restrict: 'E',
        bindToController: true,
        controller: 'ToolbarController',
        controllerAs: 'toolbar',
        templateUrl: 'toolbar.html'
    };
}

我有一个看起来像这样的控制器:

function ToolbarController($scope, $stateParams) {
    var that = this;
    that.key = $stateParams.key;

    switch (that.resultType){
        case 'r':
            that.flag = false;
            break;
        default :
            vm.flag = true;
            break;
    }
 }

我有一个看起来像这样的测试:

it('should show the the correct flag', function() {
        scope = $rootScope.$new();
        scope.resultType = 'r';
        toolbarController = $controller('ToolbarController', {$scope: scope, 
    $stateParams: $stateParams});
            expect(toolbarController.flag).toBe(false);
        });

当我刚刚测试时,控制器似乎执行了两次。第一次我的响应类型是未定义的,我的测试失败了。第二次就对了,不过这时候测试已经失败了

有人以前见过这个,知道问题出在哪里吗?

谢谢, 詹姆斯

为了使用 bindToController 测试 angularJS 指令控制器,您必须将绑定的项目作为第三个参数传递给 $controller,如下所示:

toolbarController = $controller('ToolbarController', {$scope: scope, 
$stateParams: $stateParams}, { resultType: 'r' });

有关 $controller 的更多信息,请参阅 angularJS 文档

[叹息]

找到问题了。有人添加了一个 beforeEach ,他们在其中创建了工具栏的一个实例并将其分配给一个实例变量,该实例变量使用与我的局部变量相同的名称。

去谋杀^某人,谢谢!

^ 不是字面意思,虽然我很心动。