2013-10-21 17 views
28

Mi piace usare il log della console per il feedback, forse troppo, ea volte mi imbatto in codice che come convenzione abbiamo aggiunto $ timeout nella direttiva/service/controller, a volte tanto a lungo come 500 ms, e ora il problema è durante il test unitario, ho notato che solo console.logs direttamente sotto il costruttore viene inviato al karma e inviato sullo schermo.come funziona il timeout nei test angolari in karma

i registri della console spostati in timeout o asserzioni piuttosto avvolte in $ timeout non producono alcun risultato come se fosse ignorato, qual è la soluzione ai timeout?

risposta

88

Nei test di unità, si carica ngMock, che sovrascrive l'originale $timeout con la sua simulazione. Mock $timeout non funziona come il vero JavaScript timeout. Per farlo chiamare il codice che è dentro, devi fare $timeout.flush() dal test dell'unità.

Se $timeout ha funzionato come il vero timeout, avresti dovuto scrivere test di unità asincroni per tutte le funzioni che utilizzano $timeout.

Ecco un esempio di una funzione semplificata che utilizza $timeout e come testarlo:

gaApi.getReport = function() { 
    report = $q.defer() 

    $timeout(function() { 
    $http({method: 'GET', url: 'https://www.googleapis.com/analytics/v3/data/ga'}) 
     .success(function(body) { 
     report.resolve(body) 
     }) 
    }, 300) 

    return report.promise 
} 

una prova di unità:

describe('getReport', function() { 
    it('should return report data from Google Analytics', function() { 
    gaApi.getReport().then(function(body) { 
     expect(body.kind).toBe('analytics#gaData') 
    }) 

    $timeout.flush() 
    $httpBackend.flush() 
    }) 
}) 
+6

IMHO la squadra angolare è proprio che i test di scrittura asincrona schifo. 'flush()' FTW. – weltschmerz

+1

Mi sono imbattuto in un articolo che utilizza $ timeout.flush all'inizio del test invece che dopo. Qual è la differenza in questo approccio? http://jasonwatmore.com/post/2015/03/06/AngularJS-Unit-Testing-code-that-uses-$timeout.aspx – Winnemucca

Problemi correlati