在我的控制器中,我在$ 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事件来解决这个问题,但我宁愿在我的单元测试中根本不调用它,除非我自己发出事件。
有什么想法吗?
答案 0 :(得分:0)
我设法使用this question的第二个答案解决了这个问题。
基本上,您可以通过在$ urlRouterProvider模块上调用deferIntercept()来禁用单元测试中的ui-router。
beforeEach(module(function($urlRouterProvider) {
$urlRouterProvider.deferIntercept();
}));
解释了与karma / jasmine相关的这个和其他ui-router相关的问题here。