我有 $rootScope
和 $scope
设置来监听某些事件。在单元测试(Jasmine)中,我想测试 Controller 的 $scope.$on
处理程序,但不测试超出测试范围的 $rootScope.$on
。因此,我尝试监视 $rootScope.$on
使其使用以下代码调用假函数
$rootScope = _$rootScope_;
$scope = $rootScope.$new();
spyOn($rootScope, '$on').andCallFake(function () { }); //let $rootScope skip the $on handler
不幸的是,我发现 $scope
中的代码结果也被监视,这是意料之外的。
有什么解决办法吗?
最佳答案
问题在于 $scope 继承自 $rootScope 并共享相同的 '$on'。
我能看到的唯一解决方案是直接在 $scope 对象上设置 $on 函数(这样 $scope 不会继承 $on 函数):
// Affect $on function on $scope object
// This way $scope has its own $on function
$scope.$on = $rootScope.$on;
// Spy $on function on $rootScope only
spyOn($rootScope, '$on');
看到这个 fiddle :http://jsfiddle.net/dv5TA/1
关于javascript - 监视 $rootScope 结果 $scope 也被监视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20878971/