0

Я начинаю узнавать, как делать unitTesting с жасмином. Я много читал в Интернете и так, но я не могу решить свою проблему.uibModal провайдер неизвестный unitTest

У меня есть директива с контроллером. Этот контроллер использует службу $ uibModal для открытия модальности при щелчке элемента. Я пытаюсь ввести эту услугу из своего теста, но я не могу. Я прочитал много тем, говорящих, что должен передать экземпляр. Я пытаюсь это сделать, но я не могу. Пожалуйста, любая помощь будет оценена по достоинству.

.controller('myController', ['$scope', '$uibModal', function($scope, $uibModal){ 
    var self = this; 
    //OTHER CODE 
    self.openMyModal = function(dataInput) { 
     var modalInstance = $uibModal.open({ 
      animation: true, 
      bindToController: true, 
      templateUrl: 'app/myComponent/modals/component-modal.html', 
      controllerAs: 'componentModalCtrl', 
      controller: 'componentModalController', 
      windowClass: 'semi-modal semi-modal--large', 
      scope: $scope 
     }) 
    } 
    //OTHER CODE 
} 

Это тест, где я пытаюсь издеваться над этим модалом.

beforeEach(function(){ 
    angular.mock.module('templates'); 
    angular.mock.module('app.components.myComponent'); 

    angular.mock.inject(function($compile, $rootScope, $templateCache, $controller){ 
     scope = $rootScope; 
     modalInstance = { close: function(){}, dismiss: function(){}, open: function(){} 
    }; 
    //Initializing element and doing compile and digest 
    controller = $controller('myController', {$scope: scope, $uibModal: modalInstance}); 

}) 

Я получаю ошибку

Неизвестный поставщик: $ uibModalProvider < - $ uibModal.

Могу ли я внедрить эту услугу по-другому? Что я делаю неправильно?

P.S: Я прочитал это Testing AngularUI Bootstrap modal instance controller

Angular ui bootstrap $uibModalInstance breaks down unit tests

Mocking $modal in AngularJS unit tests

ответ

0

Наконец я решил. Это была глупая ошибка. Я импортировал дополнительный модуль, который отсутствовал в моих тестах. После этого я мог издеваться над своим сервисом и использовать его без каких-либо проблем.

angular.mock.inject(function($compile, $rootScope, $templateCache, $controller, $uibModal){ 
    scope = $rootScope; 
    uibModal = $uibModal; 
    element = angular.element('<directive-tree input-tree=inputTree subsystem=subsystem></directive-tree>'); 
    $compile(element)(scope); 
    scope.$digest(); 
    controller = $controller('directiveTreeController', {$scope: scope, $uibModal: uibModal}); 
    }); 
1

Попробуйте это:

beforeEach(module(function ($provide) { 
    $provide.service("$uibModal", function() { 
     // mock methods here 
    }); 
})); 
Смежные вопросы