$ stateChangeSuccess总是在单元测试中触发

时间:2016-01-14 15:31:57

标签: angularjs unit-testing jasmine karma-runner

在我的控制器中,我在$ scope上有两个事件监听器,一个用于$ stateChangeSuccess,另一个用于消息事件:

$scope.$on('$stateChangeSuccess', function () {
  $scope.methodA();
});

$scope.$on('message', function () {
  $scope.methodB(); 
});

在我的单元测试中,我只想测试 methodB 已被调用:

spyOn($scope, '$on').and.callThrough();
spyOn($scope, 'methodB');
$scope.$emit('message');
expect($scope.methodB).toHaveBeenCalled();

问题是$ stateChangeSuccess也被调用,即使我自己也没有发出这个事件。应该是这种情况还是我在ui-router中错误配置了什么?

我可以通过模拟$ stateChangeSuccess事件来解决这个问题,但我宁愿在我的单元测试中根本不调用它,除非我自己发出事件。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我设法使用this question的第二个答案解决了这个问题。

基本上,您可以通过在$ urlRouterProvider模块上调用deferIntercept()来禁用单元测试中的ui-router。

beforeEach(module(function($urlRouterProvider) {
  $urlRouterProvider.deferIntercept();
}));

解释了与karma / jasmine相关的这个和其他ui-router相关的问题here