2013-01-02 5 views
12

Ho il seguente regolatore:in js angolari durante il test del regolatore ricevuti sconosciuto fornitore

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

che dipende da quanto segue servizio:

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

Cercato di verificare il controller utilizzando il seguente codice:

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() { 

    }); 
}); 

ma ho ottenuto il seguente errore:

Error: Unknown provider: MainCtrlProvider <- MainCtrl. 

Ps Ho provato il seguente post, non sembra aiutare

risposta

26

Il modo corretto per testare i controller è di usare $ controller come ad esempio:

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

esempio dettagliata:

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

Il motivo per cui non è possibile caricare un controller come dipendenza è perché i controller sono contenuti in un registro e non dispongono di un provider. Ecco perché ottieni l'errore sopra riportato. Solo valori/costanti/fabbriche/servizi possono essere caricati come dipendenze. –

+0

@ShaiRez, grazie mille. Stavo scherzando con questo per ore e poi ho letto il tuo commento per la terza volta e ha cliccato! Grazie ancora. – ken