2011-12-01 15 views
5

Sto scrivendo un (sempre più grande) insieme di unit test utilizzando Coffeescript e node.js. Costruisco i file utilizzando il caffè "guardare" l'opzione (w)Come posso eseguire il test continuo di unità/unità in Coffeescript?

coffee -w -b -c -o web/ src/ 

mio problema è che l'esecuzione dei test di unità impiega 20 secondi (sto assumendo per la compilazione a js).

Se possibile, mi piacerebbe eseguire automaticamente i test di unità su una modifica di file (.js compilata), che eliminerebbe la lunga attesa per i risultati.

Il mio attuale Cakefile:

fs   = require 'fs' 
{print}  = require 'sys' 
{spawn, exec} = require 'child_process' 

build = (watch, callback) -> 
    if typeof watch is 'function' 
    callback = watch 
    watch = false 
    options = ['-c', '-b', '-o', 'web', 'src'] 
    options.unshift '-w' if watch 

    coffee = spawn 'coffee', options 
    coffee.stdout.on 'data', (data) -> print data.toString() 
    coffee.stderr.on 'data', (data) -> print data.toString() 
    coffee.on 'exit', (status) -> callback?() if status is 0 

task 'test', 'Run the test suite', -> 
    build -> 
    require.paths.unshift __dirname + "/lib" 
    {reporters} = require 'nodeunit' 
    process.chdir __dirname 
    reporters.default.run ['test'] 
+1

Whoa-20 secondi? Non ho mai avuto un progetto CoffeeScript che impieghi tanto tempo per essere compilato. O anche 2 secondi, del resto. Potresti provare a compilare ciascuno dei tuoi file '.coffee' e vedere quali (se ce ne sono) impiegano più di 1 per compilare? Quindi pubblica un rapporto sul [issue tracker] (https://github.com/jashkenas/coffee-script/issues). –

+0

Probabilmente non è la compilazione - forse è il sovraccarico di node.js? Sto caricando 8 o così richiede. Il test stesso sembra essere eseguito in circa ~ 300ms. –

+1

Vuoi dire che stai caricando 8 o più 'require's nei test? Potresti provare a cronometrare ciascuno di essi per vedere quali impiegano più di qualche millisecondo? –

risposta

1

Date un'occhiata al Cakefile per il mio progetto Connect-attivi: https://github.com/adunkman/connect-assets/blob/master/Cakefile

è un po 'più complessa di quanto sstephenson di (che presumo il tuo esempio è derivato da) , ma mostra come è possibile guardare una directory di file per le modifiche e rispondere a tali cambiamenti eseguendo nuovamente i test.

+0

Dopo aver risolto un problema node.js (passando da 0.4.12-> 0.6.4), ricevo alcuni errori nell'esecuzione del file Cake: 'execvp(): Nessun file o directory \t (nodo) avviso : possibile perdita di memoria EventEmitter rilevata. 11 ascoltatori aggiunti. Usa emitter.setMaxListeners() per aumentare il limite. \t Trace: \t presso WatchitEmitter. (events.js: 133: 17) \t a /Users/chambery/node_modules/watchit/lib/watchit.js:35:13 \t a Object.oncomplete (/ Users/Chambery/node_modules/watchit/lib/watchit .js: 141: 21) \t ERRORE FATALE: v8 :: HandleScope :: Close() L'ambito locale è già stato chiuso 'Si tratta di un problema di versione? –

+0

Hmm. Se è possibile creare un caso di test per replicare questo, si prega di postare questo come un bug report sul [watchit issue tracker] (https://github.com/TrevorBurnham/watchit/issues). –

+0

Il tuo Cakefile fa il trucco. Non riesco ancora a eseguire il test completamente, ma ERRORE FATALE è dovuto a un errore del linker (?) Causato dall'aggiornamento del nodo: http://groups.google.com/group/nodejs/browse_thread/thread/ 877ff6e7434826dd –

Problemi correlati