Wow, che casino. Questo è lo scenario.Jasmine + JSTestDriver + Copertura + RequireJS
- App JS con backbone.
RequireJS per la funzionalità AMD, inizializzati come questo:
<script data-main="js/main" src="js/require.js" type="text/javascript"></script>
poi dentro main.js il codice seguente configurazione:
require.config( { paths: { ... : ... } });
Ogni Backbone Vista/model/router è un "define (. ..) "module, and" require ("theOneRouter", ...) "è chiamato una volta in main.js.
r.js utilizzato come ottimizzatore con Uglify/Closure. Un main.js 'compilato' viene creato in una sottocartella ./release che seleziono dinamicamente nel mio .net framework.
Abbiamo impiegato un po 'di tempo per far funzionare il Backbone + Require.JS, ma ora funziona alla grande!
Quindi anche uno schiaffo su Jasmine ha richiesto un po 'di lavoro personalizzato, ma ha funzionato bene. Ho dovuto caricare require.js dal mio SpecRunner.html, definire ogni modulo di test come un AMD utilizzando la chiamata define (...) di require, e istanziare & eseguire Jasmine una volta da una chiamata a require's require (...) chiamata una volta nel SpecRunner.html:
require( [ //"test/specs/testSpec1", "test/specs/views" ], function() { jasmine.getEnv().updateInterval = 1000; var reporter = new jasmine.TrivialReporter(); jasmine.getEnv().addReporter(reporter); .... .... });
anche questo funziona alla grande. I test caricano & run, nessun problema. Require si prende cura di tutto.
Ora, vorrei che un framework come JSTestDriver fungesse da mio corridore. Ho scelto JSTD per la sua semplicità, capacità di test sui browser remoti, supporto per la copertura del codice, ma sono ancora aperto per altri suggerimenti.
JSTestDriver di per sé funziona bene, l'unico problema che ho è l'esecuzione della combinazione JSTD + Jasmine + ReuireJS insieme. Il problema più grande è, se dico JSTD nel file di configurazione di una Jasmine/Richiede modulo di prova al fine di caricarlo, ottengo il seguente errore:
http://requirejs.org/docs/errors.html#mismatch
Se uso r.js a optmize tutto il mio codice in un main.js, la combinazione funziona, inclusa la copertura, ma la copertura viene raccolta su un unico file gigantesco e difficile da analizzare. Per non parlare ci vuole molto tempo per strumentare un file js di 50k linee di codice ed eseguirlo tramite JSTD.
Ho provato a creare un file js simile a un'apparecchiatura che carica tutti i moduli di codice Jasmine &, ma continuo a tornare all'errore "mancata corrispondenza" sopra riportato, E, se non dico a JSTD su ciascun modulo singolarmente (caricando un dispositivo html/js che esegue il caricamento reale) non verranno strumentati per la copertura del codice.
Qualcuno ha ottenuto questa combinazione specifica per funzionare? forse sto chiedendo troppo ...
Grazie per l'input, buon commento. Sì, hai ragione riguardo ai tuoi punti e ho provato a nominare manualmente i miei moduli e utilizzare chiamate richieste anziché define() s, ma non è una soluzione fattibile: anche se automatizzato, richiederebbe un notevole lavoro extra prima di ogni esecuzione di test, che vorrei evitare per eseguire rapidamente test durante lo sviluppo. – Bernardo
Quindi ora ho una versione con patch di jsTestDriver.jar che consente l'esportazione di file tramite espressioni regolari. Consente inoltre di caricare i file JavaScript dalla sezione "serve". La pubblicazione di file di origine JavaScript significa che non verranno eseguiti automaticamente quando le pagine dei browser vengono caricate. Invece, quando il browser esegue require.js, require è in grado di estrarre i file dalla sezione di servizio. In questo modo i moduli possono essere anonimi senza alcun problema. Vedi [Backbone-Testing] (http://pseudobry.com/backbone-testing/) – jdobry