1
我已經繼承了一個使用Karma和Jasmine的大型AngularJS項目,並且試圖遵循之前列出的約定,但是在單元測試指令/控制器模塊時遇到問題。每個模塊都是這樣定義的:角單元測試:隔離模塊上定義的某些組件
angular
.module('ap.panels.ContinuousDeliverySearchPanel', [])
.directive('continuousDeliverySearchPanel', ContinuousDeliverySearchPanel)
.controller('continuousDeliverySearchPanelCtrl', ContinuousDeliverySearchPanelCtrl);
function ContinuousDeliverySearchPanel() {
return {
restrict: 'E',
templateUrl: '/panels/continuous-delivery-search-panel/continuous-delivery-search-panel.html',
controller: 'continuousDeliverySearchPanelCtrl',
controllerAs: 'vm',
bindToController: true,
scope: {
search: '='
}
};
}
其中在模塊上定義了指令和控制器,並且控制器綁定到指令。我想創建兩套測試,一套用於控制器,一套用於指令。我遇到的問題是在測試指令時,我只想測試元素是否已經正確編譯,但是被迫處理控制器的http調用和依賴關係。這裏是我的指令測試的例子:
describe('ap.panels.ContinuousDeliverySearchPanel', function() {
var scope, template, element;
beforeEach(module('ap.panels.ContinuousDeliverySearchPanel'));
beforeEach(inject(function ($rootScope, $compile){
scope = $rootScope.$new();
template = angular.element('<continuous-delivery-search-panel></continuous-delivery-search-panel>');
element = $compile(template, scope);
scope.$digest();
}));
it('Should: compile search panel directive', function() {
expect(element).toBeDefined();
});
});
當$編譯被調用時,continuousDeliverySearchPanelCtrl運行,並開始引發錯誤,因爲它包含了許多不被嘲笑或處理的依賴和HTTP請求。但是,我不想嘲笑這一切,因爲我甚至沒有測試控制器。我想在另一個文件中單獨執行此操作,以便將測試控制器隔離。
有沒有辦法傳入一個空的控制器或隔離指令,以便成功測試它是否編譯?