2016-04-29 25 views
5

I test di unità angolari (1.2.x) in cui sto utilizzando ngMock. Il mio progetto ha un sistema di fissaggio che si basa su sinon.fakeServer. Per i miei test di unità, preferirei utilizzare questo in contrasto con lo $httpBackend.

ngMockE2E test Angular fornisce un metodo passthrough, tuttavia non esiste un equivalente chiaro per i test di unità. La logica seems to be che i test di unità non dovrebbero mai passare (a un server) ma nella mia situazione sto solo provando a passare a una simulazione non angolare-dipendente.

La mia strategia ora è quella di creare uno spessore corrispondente alle richieste .whenGet e .whenPost e instradarle sul mio server falso.

Tuttavia, ciò che sarebbe meglio è semplicemente "spegnere" lo $httpBackend. C'è un modo per fare questo?

+0

Hai provato 'passThrough'? https://docs.angularjs.org/api/ngMockE2E/service/$httpBackend –

+0

Ho fatto, questo apparentemente funziona solo per 'ngMockE2E'. – vpiTriumph

risposta

1

This soluzione potrebbe funzionare.

Quindi la proposizione è utilizzare $ httpBackend di ngMockE2E. In realtà se il tuo test causa la richiesta XHR, non è un 'Unit Test'.

+3

Sebbene ciò possa teoricamente rispondere alla domanda, [sarebbe preferibile] (// meta.stackoverflow.com/q/8259) includere qui le parti essenziali della risposta e fornire il link per riferimento. – manetsus

2

Si consiglia di provare

angular.module('httpReal', ['ng']) 
    .config(['$provide', function($provide) { 
     $provide.decorator('$httpBackend', function() { 
      return angular.injector(['ng']).get('$httpBackend'); 
     }); 
    }]) 
    .service('httpReal', ['$rootScope', function($rootScope) { 
     this.submit = function() { 
      $rootScope.$digest(); 
     }; 
    }]); 

In questo modo è possibile ripristinare httpBackend. Per ulteriori dettagli, fare riferimento a: E2E mock $httpBackend doesn't actually passThrough for me