2012-10-02 6 views
8

Sto scrivendo qualche test per la nostra app e ho incluso angularjs-mocks.js in modo che io possa usare le belle funzioni di dsl che vengono con esso.Utilizzo di mock di angularjs senza realmente prendere in giro qualcosa

Ma non voglio realmente prendere in giro le richieste $ http, dal momento che sto integrando questa app con il backend di un client che è costantemente in flusso e voglio testare le risposte reali.

Qual è il modo migliore (più semplice) per utilizzare il vero back-end http in questa situazione?

EDIT:

ho trovato una soluzione potenziale, che è quello di utilizzare questo:

$httpBackend.whenPOST(/.*/).passThrough() 

Ma, come ho detto qui di seguito, non funziona, forse rotto? Ottengo questo errore:

Error: Unexpected request: POST /some/url/here No more request expected 

Ho aperto un problema qui: https://github.com/angular/angular.js/issues/1434

+0

si potrebbe sempre creare un mock $ http per iniettare creando un semplice javascript che ha fatto la richiesta http XHR, non sono necessari mock angolari. È il bello del testing in JavaScript, puoi schiaffeggiare gli oggetti e iniettarli come preferisci grazie alla digitazione dinamica. –

+0

Giusto, ma il problema è che gli arresti d'angolo sovrascrivono $ httpBackend, che usa $ http. Ora sto cercando di aggirarlo con $ httpBackend.whenGET (/.*/). PassThrough(), ma sembra sia rotto, o non lo sto usando bene. – doubledriscoll

+0

Immagino che cosa sto suggerendo sia possibile utilizzare vanilla js per creare un oggetto con tutti i metodi necessari. Non è necessaria una simulazione angolare. –

risposta

2

ho capito una soluzione rapida e sporca al problema: Commentando la riga dove $ httpBackend viene sostituita (1.365 in angolare -mocks-1.0.2.js).

angular.module('ngMock', ['ng']).provider({ 
    $browser: angular.mock.$BrowserProvider, 
    $exceptionHandler: angular.mock.$ExceptionHandlerProvider, 
    $log: angular.mock.$LogProvider, 
    //$httpBackend: angular.mock.$HttpBackendProvider, 
    $rootElement: angular.mock.$RootElementProvider 
}).config(function($provide) { 
    $provide.decorator('$timeout', function($delegate, $browser) { 
    $delegate.flush = function() { 
     $browser.defer.flush(); 
    }; 
    return $delegate; 
    }); 
}); 

Questo rompe probabilmente qualcos'altro, ma mi permette di testare quello che ho bisogno di testare, e non influenza l'applicazione di produzione, quindi è bene con me. Speriamo che in futuro ci sarà un modo per farlo.

+0

È piuttosto brutto. È triste che non ci sia modo migliore .. – stej

Problemi correlati