单元测试 – 如何单位测试带角度的角度控制器$on?
发布时间:2020-12-17 07:38:01 所属栏目:安全 来源:网络整理
导读:我的Angular应用程序中有一个控件与事件侦听器,定义如下. angular.module('test').controller('TestCtrl',function($rootScope,$scope,testService) { [...] $scope.$on("myEvent",function(args,value) { testService.doStuff(value); }); }); 这在应用程序
我的Angular应用程序中有一个控件与事件侦听器,定义如下.
angular.module('test').controller('TestCtrl',function($rootScope,$scope,testService) { [...] $scope.$on("myEvent",function(args,value) { testService.doStuff(value); }); }); 这在应用程序本身中完美无缺.但是,当我尝试单元测试控制器的功能(使用Jasmine和Karma)时,每个测试方法会引发以下错误: TypeError: $scope.$on is not a function in [...]/testController.js 我在我的测试方法中创建控制器如下. it('does stuff',inject(function($rootScope,$controller,testService) { var scope = $rootScope.$new; $controller('TestCtrl',{ $scope : scope }); [...] })); 我可以通过更改我的控制器来使用rootScope来解决问题: $rootScope.$on(...) 但是当然应用程序不能像预期的那样工作.我也可以通过在我的测试代码中引入$on方法来摆脱错误: var scope = $rootScope.$new; scope.$on = function() {}; 但是像这样的嘲笑听众就失败了测试我的真实代码的目的. 为什么测试代码没有找到范围的$on方法? (但是在rootScope上找到它…) 必须有一些基本的东西,我错过了这里,但是即使经过大量搜索和阅读Angular源代码,我也无法弄清楚.
$rootScope.$new是一个函数.你需要调用它($rootScope.$new()):
it('does stuff',testService) { var scope = $rootScope.$new(); $controller('TestCtrl',{ $scope : scope }); [...] })); 示例plunk:http://plnkr.co/edit/t1x62msmOQDkNItGzcp9?p=preview (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |