2013-01-19 10 views
12

Ho un piccolo progetto con specifiche Jasmine e sto utilizzando Testacular come mio runner di test. Non capisco come riesca a eseguire il debug, sia il codice dell'app che il codice della specifica. Quando provo a impostare un punto di interruzione in Chrome Dev Tools, non viene colpito la prossima volta che le specifiche vengono eseguite perché carica i file ogni volta con una nuova stringa di query.Come si esegue il debug di un'esecuzione di specifiche Jasmine con Testacular (Karma)?

La cosa migliore che ho trovato finora è utilizzare console.log() ma preferirei utilizzare i punti di interruzione di Chrome Dev Tools.

(sto usando Visual Studio 2012 per lo sviluppo.)

Grazie

risposta

13

Testacular non è lo strumento migliore da utilizzare per il debug. Il suo potere risiede nel fatto che eseguirà i test in più browser, e lo farà ESTREMAMENTE rapidamente, e può farlo ogni volta che cambierai un file, quindi ti dirà se hai rotto un test. Ma se hai bisogno di eseguire il debug, non è lo strumento migliore.

Si può effettivamente inserire un'istruzione "debugger" nel codice per causarne l'interruzione, ma si può finire per colpire lo stesso punto di interruzione decine o più volte nei test se questa è una linea comune di codice che viene colpito in test multipli. Dove forse si sta solo rompendo in un dato scenario, quindi devi saltare tutti i punti di interruzione tranne l'occorrenza in cui vedi un problema. Se si utilizza moka o gelsomino, è possibile eseguire un solo test nell'intera suite di test. Con gelsomino che sta cambiando quel test da esso() a iit(), con la moka è it.only(). Ma anche così, testacular è ancora lo strumento sbagliato per questo lavoro.

Una soluzione di gran lunga migliore è utilizzare un "test" di test diverso e basta eseguire il test singolo che si sta interrompendo. Questo è facilmente realizzabile usando gelsomino o moka o qualunque sia il quadro di prova scelto. Scriverete già i vostri test testacular in uno di questi framework poiché testacular è uno strumento di automazione e non un framework di test. Quindi basta creare un file runner di prova e utilizzarlo, caricare il file, e se stai usando chrome, vai negli strumenti di sviluppo, premi Command-O su MAC o Control-O su windows e seleziona il file che desideri inserisci un punto di interruzione e imposta il punto di interruzione e stai cucinando a gas.

L'utilizzo del tradizionale "test runner" con il framework di test non interferirà con l'utilizzo di testacular. I due si esibiranno in concerto felici e contenti.

Ecco i link ai miei articoli preferiti per fare questo nei principali framework 3 prova:

gelsomino: http://net.tutsplus.com/tutorials/javascript-ajax/testing-your-javascript-with-jasmine/

QUnit: http://www.testdrivenjs.com/getting-started/qunit-setup/

Mocha: Non ho un collegamento a una buona articolo per questo. Entro la metà di febbraio 2013 verrà pubblicato il mio PluralSight, corso di test sul client JavaScript, che potrete trovare lì, insieme a istruzioni dettagliate sulla creazione di QUnit e Jasmine. Hanno una breve prova gratuita che puoi usare per visualizzare il contenuto senza pagare. Questo URL si collegherà a quel corso quando verrà pubblicato.http://pluralsight.com/training/Authors/Details/joe-eames

+0

Grazie per la spiegazione. Per questo progetto stavo bene usando 'debugger;' ma userò sicuramente il tuo suggerimento se progetti futuri. – Buzzy

+0

@Buzzy sei il benvenuto! –

6

È possibile utilizzare l'istruzione debugger; di per sé, e Chrome si romperà in quella dichiarazione fino a quando il pannello di strumenti di sviluppo è aperto e i punti di interruzione sono abilitati.

+0

Grazie per la risposta. La tua soluzione funziona ma sto cercando un modo più strutturato per farlo. Se non c'è una soluzione migliore suggerita, la contrassegnerò come risposta. – Buzzy

4

Il mio approccio preferito per i test di debug con il Karma (era Testacular) è quello di utilizzare questo plugin:

avvio in su Karma come questo:

karma start karma.conf.js --browsers=Chrome --single-run=false --reporters=kjhtml 

Questo apre Karma in modalità di debug con un pulsante "Debug". Quando fai clic su questo, esegue tutti i test in una finestra di Chrome e mostra i risultati mentre passano. A questo punto puoi usare gli Strumenti per sviluppatori, impostare punti di interruzione, passare al codice ecc. Come al solito.

Ancora meglio, è possibile fare clic su un test in errore e passerà a una modalità in cui viene eseguito solo un test. Ora puoi testare rapidamente e eseguire il debug di questo test senza dover aspettare che tutti gli altri vengano eseguiti.

Per vedere in azione, ecco una richiesta di pull GitHub dove ho aggiunto questa libreria per il nostro progetto:

https://github.com/edx/edx-ui-toolkit/pull/12

+1

non sono sicuro se le cose sono cambiate di recente o cosa, ma sembra che l'ID effettivo del reporter non sia 'html' ma' kjhtml' (da ufficiale [readme] (https://www.npmjs.com/package/karma-jasmine-html -reporter)) – superjos

Problemi correlati