5

Quindi, questo è il mio primo progetto in cui sto usando Karma e Jasmine per testare il mio codice angularJS. Generatore angolare Yeoman usato per l'installazione.Eseguendo più di 10 test sul karma utilizzando le cause del gelsomino: "ERRORE: alcuni dei tuoi test hanno ricaricato una pagina intera!"

Non appena ho raggiunto 11 test, ho ricevuto un errore che diceva "Alcuni test hanno eseguito il caricamento di una pagina intera". Non sto facendo alcun test che possa innescare una ricarica.

Scavando più in profondità Ho visto lo stesso problema a cui si fa riferimento su Github. https://github.com/jasmine/jasmine/issues/366 - (FuzzySockets commenti)

Il problema sembra derivare da una riga di codice gelsomino-core https://github.com/jasmine/jasmine/blob/master/lib/jasmine-core/jasmine.js

Per evitare la fuoriuscita della pila, il maximumSpecCallbackDepth è impostato a 20. E ogni volta currentSpecCallbackDepth supera questo, ulteriori test vengono eseguiti su un nuovo stack utilizzando la funzione setTimout.

Questa è la linea che sembra causare problemi e fa scattare l'errore al karma. (L'ho verificato invocando il metodo setTimeout nel mio test di unità e ha generato lo stesso errore).

Se cambiare il maximumSpecCallbackDepth a 100, i miei test funzionano bene, e nessun errore sono gettati alla fine

Qualcuno ha visto questo problema e conoscere una correzione? Sto usando le ultime versioni di karma (0.13.15) e gelsomino (2.4.1).

Non ho davvero trastullato troppo con il grunt predefinito o la configurazione di karma fornita con quelle generate da yeoman, tranne che sto utilizzando il launcher di Chrome al posto del phantomJS predefinito, quindi non capisco come tutti altrimenti non sta affrontando lo stesso problema qui.

+0

Tutti i miei test sono eseguiti però –

risposta

1

+1 per questo problema. Come hai detto, è causato dalla limitazione maximumSpecCallbackDepth, ma non ho trovato alcuna soluzione per questo problema fino ad ora. Probabilmente potresti tenere traccia del problema qui https://github.com/karma-runner/karma/issues/1101.

Una soluzione temporanea consiste nel ridurre il blocco "descriva" nidificato nel progetto.

1

Ho riscontrato un problema simile a quello in cui le iniezioni angolari nel globale beforeEach hanno smesso di funzionare e tutti i test hanno avuto esito negativo dopo il limite 20 di maximumSpecCallbackDepth.

Durante le mie ricerche, ho scoperto che l'angular-mock non funziona bene con il setTimeout fatto in gelsomino quando viene raggiunto quel limite.

Il seguente codice che viene dato come esempio in tutto il mondo creerà un nuovo iniettore su ogni banco di prova:

var yourService; 
beforeEach(module('app')); 
beforeEach(inject(function(_yourService_) { 
    yourService = _yourService_; 
})); 

Invece, si potrebbe fare quanto segue, che utilizzerà un singolo iniettore e registrare i moduli solo una volta .

var yourService; 
module.sharedInjector(); 
beforeAll(module('app')); 
beforeEach(inject(function(_yourService_) { 
    yourService = _yourService_; 
})); 

Spero che questo potrebbe aiutare gli altri come mi ci sono voluti quasi una settimana per scoprire che questa è stata la causa principale del problema e non Jasmine se stessa, come alcuni pensano su github.

Problemi correlati