javascript - 监视 $rootScope 结果 $scope 也被监视

标签 javascript unit-testing angularjs mocking jasmine

我有 $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/

相关文章:

c# - 如何最好地从方法中测试 XML 的有效性?

python - 在 PyCharm IDE 5.0.4 中运行特定的单元测试功能

javascript - PDF Blob - 弹出窗口不显示内容

angularjs - 如何设置 ion-autocomplete 的值

javascript - Angularjs 为作用域赋值在函数内部不起作用

javascript - 如果表单字段的值小于变量,则显示带有信息的警报

javascript - 在 Javascript 中解构对象字段并计算总和

javascript - 不同大小节点的碰撞检测未按预期工作

javascript - Node 更新特定包

c++ - 如何在模拟期望中调用 const std::function<> 和参数?