我同时设置$rootScope
和$scope
来收听某些事件。在单元测试(Jasmine)中,我想测试控制器的$scope.$on
处理程序,而不是测试范围之外的$rootScope.$on
。因此,我试图窥探$rootScope.$on
,使其调用带有以下代码的假函数
$rootScope = _$rootScope_;
$scope = $rootScope.$new();
spyOn($rootScope, '$on').andCallFake(function () { }); //let $rootScope skip the $on handler
不幸的是,我发现$scope
的代码结果也被预防了。
对此有任何解决方案吗?
答案 0 :(得分:2)
问题是$ scope继承自$ rootScope并共享相同的'$ on'。
我能看到的唯一解决方案是直接在$ scope对象上设置$ on函数(这样$ scope不会在函数上继承$):
// 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');
看到这个小提琴:http://jsfiddle.net/dv5TA/1