单元测试 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 ,他们在其中创建了工具栏的一个实例并将其分配给一个实例变量,该实例变量使用与我的局部变量相同的名称。
去谋杀^某人,谢谢!
^ 不是字面意思,虽然我很心动。
这很奇怪。
我有一个基本如下所示的指令:
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 ,他们在其中创建了工具栏的一个实例并将其分配给一个实例变量,该实例变量使用与我的局部变量相同的名称。
去谋杀^某人,谢谢!
^ 不是字面意思,虽然我很心动。