我的Angular应用程序中有一个控件与事件侦听器,定义如下.
angular.module('test').controller('TestCtrl',function($rootScope,$scope,testService) { [...] $scope.$on("myEvent",function(args,value) { testService.doStuff(value); }); });@H_502_2@这在应用程序本身中完美无缺.但是,当我尝试单元测试控制器的功能(使用Jasmine和Karma)时,每个测试方法会引发以下错误:
TypeError: $scope.$on is not a function in [...]/testController.js@H_502_2@我在我的测试方法中创建控制器如下.
it('does stuff',inject(function($rootScope,$controller,testService) { var scope = $rootScope.$new; $controller('TestCtrl',{ $scope : scope }); [...] }));@H_502_2@我可以通过更改我的控制器来使用rootScope来解决问题:
$rootScope.$on(...)@H_502_2@但是当然应用程序不能像预期的那样工作.我也可以通过在我的测试代码中引入$on方法来摆脱错误:
var scope = $rootScope.$new; scope.$on = function() {};@H_502_2@但是像这样的嘲笑听众就失败了测试我的真实代码的目的.