2013-11-04 15 views
5

In uno dei miei test di unità che sto cercando di fare

beforeEach(function() { 
    angular.mock.inject(function ($injector) { 
     $httpBackend = $injector.get('$httpBackend'); 
     mockUserResource = $injector.get('User'); 
     $httpProvider = $injector.get('$httpProvider'); // <-- problem 
     $httpProvider.interceptors.push('myInterceptor'); 
    }); 
}); 

(demo)

Perché non è possibile iniettare $ httpProvider?

Il motivo per cui sto facendo questo è perché non carico il file che aggiunge tutti i miei intercettori, perché voglio testarli uno per uno!

+0

Top domanda notch, così conciso e facile da cercare! Stavo avendo questo problema esatto. – Breedly

risposta

10

I fornitori sono iniettabili solo nella fase di configurazione, angular.config.

Secondo this answer, si potrebbe provare qualcosa di simile:

beforeEach(module('yourModule', function($httpProvider) { 
    $httpProvider.interceptors.push('myInterceptor'); 
})); 

beforeEach(function() { 
    angular.mock.inject(function($injector) { 
    $httpBackend = $injector.get('$httpBackend'); 
    mockUserResource = $injector.get('User'); 
    }); 
}); 

Per ulteriori informazioni su come dipendenza funziona l'iniezione, this è un grande articolo (non scritti dal team AngularJS)

1

Il nome Provider viene aggiunto automaticamente da angolare. Quindi, dovresti semplicemente iniettare $http.

$httpProvider = $injector.get('$http'); 

qui è un working fork of your fiddle.

+0

Questo è corretto, volevo solo aggiungere che potresti voler evitare le richieste HTTP effettive nei test unitari. –

+5

Penso che ti stai dimenticando di voler configurare '$ httpProvider' usando gli intercettori. Non sta cercando di iniettare il servizio '$ http'. –

Problemi correlati