2013-01-02 6 views
12

Mam następujący kontroler:w kanciastych js podczas testowania kontrolera dostali wiadomo dostawcy

angular.module('samples.controllers',[]) 
    .controller('MainCtrl', ['$scope', 'Samples', function($scope, Samples){ 
    //Controller code 
} 

Która zależy od następującego usługi:

angular.module('samples.services', []). 
    factory('Samples', function($http){ 
    // Service code 
} 

Próbował przetestować kontroler, używając następującego kodu:

describe('Main Controller', function() { 
    var service, controller, $httpBackend; 

    beforeEach(module('samples.controllers')); 
    beforeEach(module('samples.services')); 
    beforeEach(inject(function(MainCtrl, Samples, _$httpBackend_) { 

    })); 

    it('Should fight evil', function() { 

    }); 
}); 

Ale uzyskałem następujący błąd:

Error: Unknown provider: MainCtrlProvider <- MainCtrl. 

Ps próbowałem następujące post, nie wydaje się, aby pomóc

Odpowiedz

26

Prawidłowy sposób przetestować kontrolery jest użycie $ kontrolera jako takie:

ctrl = $controller('MainCtrl', {$scope: scope, Samples: service}); 

Szczegółowy przykład:

describe('Main Controller', function() { 
    var ctrl, scope, service; 

    beforeEach(module('samples')); 

    beforeEach(inject(function($controller, $rootScope, Samples) { 
    scope = $rootScope.$new(); 
    service = Samples; 

    //Create the controller with the new scope 
    ctrl = $controller('MainCtrl', { 
     $scope: scope, 
     Samples: service 
    }); 
    })); 

    it('Should call get samples on initialization', function() { 

    }); 
}); 
+7

Powodem, dla którego nie można załadować kontrolera jako zależności, jest fakt, że kontrolery są przechowywane w rejestrze i nie mają dostawcy. Właśnie dlatego otrzymujesz powyższy błąd. Tylko wartości/stałe/fabryki/usługi mogą być ładowane jako zależności. –

+0

@ShaiRez, wielkie dzięki. Robiłem sobie z tym problem godzinami, a potem przeczytałem twój komentarz o 3 raz i kliknęło! Dzięki jeszcze raz. – ken

Powiązane problemy