Я унаследовал большой проект AngularJS с использованием Karma и Jasmine, и я стараюсь следовать правилам, которые были изложены до меня, но у меня есть проблемы с модулями тестирования модулей/контроллеров. Каждый модуль определяется следующим образом:Угловое модульное тестирование: изолировать определенные компоненты, определенные на модуле
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, которые не издевались или дела. Однако у меня нет желания издеваться над этим из-за того, что я даже не тестирую контроллер. Я хотел бы сделать это отдельно в другом файле, где я изолирую контроллер для тестирования.
Есть ли способ пройти в пустом контроллере или изолировать только директиву, чтобы успешно протестировать, если он скомпилирован?