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請求。但是,我不想嘲笑這一切,因爲我甚至沒有測試控制器。我想在另一個文件中單獨執行此操作,以便將測試控制器隔離。

有沒有辦法傳入一個空的控制器或隔離指令,以便成功測試它是否編譯?

回答