13
我在我的Angular应用程序中有一个事件监听器的控制器,定义如下。
angular.module('test').controller('TestCtrl', function($rootScope, $scope, testService) {
[...]
$scope.$on("myEvent", function(args, value) {
testService.doStuff(value);
});
});
这完美地在应用程序本身。然而,当我尝试单元测试控制器(使用茉莉和噶)的功能,每个测试方法引发以下错误:
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() {};
但嘲讽听众喜欢这种失败的测试我真正的代码的目的。
为什么不测试代码中找到的scope
的$on
方法?(但在rootScope
上找到它,仍然...)
必须有一些基本的东西,我在这里失踪了,但是我还是无法弄清楚,即使经过大量的谷歌搜索和阅读Angular源代码。
谢谢!这真是一个令人尴尬的错误......(唉!)我不知道为什么我会这样写,但是这个错误已经感染了我所有的测试类。 – MJV