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