0

Ich fange an zu lernen, wie unitTesting mit Jasmin zu tun. Ich lese viel im Internet und SO, aber ich kann mein Problem nicht lösen.uibModal-Anbieter unbekannt unitTest

Ich habe eine Direktive, die einen Controller hat. Dieser Controller verwendet den Dienst $ uibModal, um ein Modal zu öffnen, wenn ich auf ein Element klicke. Ich versuche, diesen Service von meinem Test zu injizieren, aber ich kann nicht. Ich lese viele Threads, die sagen, dass ich eine Instanz übergeben muss. Ich versuche es, aber ich kann nicht. Bitte jede Hilfe wird geschätzt.

.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 
} 

Dies ist der Test, wo ich versuche, diese Modal zu verspotten.

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}); 

}) 

Ich erhalte den Fehler

Unbekannt Anbieter: $ uibModalProvider < - $ uibModal.

Kann ich diesen Dienst auf andere Weise injizieren? Was mache ich falsch?

P. S: Ich habe diese Zeilen lesen Testing AngularUI Bootstrap modal instance controller

Angular ui bootstrap $uibModalInstance breaks down unit tests

Mocking $modal in AngularJS unit tests

Antwort

0

Schließlich löste ich es. Es war ein dummer Fehler. Ich habe ein zusätzliches Modul importiert, das mir in meinen Tests fehlte. Danach konnte ich meinen Service verspotten und es ohne Probleme so verwenden.

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

versuchen diese:

beforeEach(module(function ($provide) { 
    $provide.service("$uibModal", function() { 
     // mock methods here 
    }); 
}));