0
我試圖運行一個簡單的單元測試,只是創建一個控制器(一個同事寫了它,所以其他人可以添加他們的自己的單元測試),但是我所做的改變都阻止了這種傳遞。同事不知道爲什麼它不起作用。這是簡單的測試。
測試
describe("My Controller", function() {
var $q, $controller, $scope, $rootScope;
var createCtrl;
beforeEach(function() {
module('myModule');
});
beforeEach(inject(function (_$q_, _$rootScope_, _$controller_, _$httpBackend_) {
$controller = _$controller_;
$scope = _$rootScope_.$new();
$scope.$parent = {
dummyFn: function() {}
};
createCtrl = function createCtrl() {
return $controller('MyController', {
'$q': _$q_,
'$scope': $scope
});
};
}));
}));
describe("Controller stability", function() {
it("should initialise the controller without error", function() {
var controller = createCtrl();
});
});
正如你可以看到上面的測試中創造了控制器沒有做任何事情,但catch錯誤的。
這是一個模擬了在控制器代碼:
代碼
(function() {
"use strict";
const {angular} = window;
angular.module('myModule', [])
.controller('MyController', MyController);
MyController.$inject = ['$routeParams', '$scope'];
function MyController($routeParams, $scope) {
var vm = this;
$scope.$on('event-name', function(event, eventData) {
vm.eventData = eventData;
updateData();
})
}
})();
錯誤的,我得到取決於我如何運行的因果報應,但鬆散的聯繫似乎。
如果我運行它形成了gulp
任務的命令行,我得到的是:
TypeError: undefined is not an object (evaluating 'current.$$listenerCount[name]') in dist/app/vendor.js
[email protected]/app/vendor<line number>
並通過角堆棧跟蹤和回測試。
如果我在噶的調試窗口中運行它:
Uncaught TypeError: Cannot read property 'event-name' of undefined
at Scope.$get.Scope.$on (hostname.com:9876/base/dist/vendor.js:<line number>)
然後再次下跌,雖然堆棧跟蹤。
看看$on
的代碼我看不出爲什麼它會以這兩種不同的方式失敗。
將控制器代碼更改爲使用$rootScope.$on
似乎可以減輕測試的負擔,但我不明白爲什麼測試需要測試,而不是主應用程序。
爲什麼$on
在測試中不在$scope
上,當它在主應用程序中?
這現在造成了必須清理聽衆的問題! – Pureferret