2011-12-01 18 views
5

Coffeescript ve node.js. kullanarak bir (daha büyük) bir dizi birim testi yazıyorum. Kahveyi kullanarak dosyaları oluşturmak "izlemek" seçeneği (-w)Coffeescript'te sürekli yapı/birim testi nasıl yapabilirim?

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

Sorunum (derleme .js için ben varsayarak) birim testleri çalışan 20 saniye sürer olmasıdır.

Mümkünse, birim testlerini otomatik olarak (derlenmiş bir .js) dosya değişikliğinde çalıştırmak istiyorum, bu da sonuçların uzun süre beklemesini engeller.

Bulunduğum Cakefile: https://github.com/adunkman/connect-assets/blob/master/Cakefile

(Ben türetilmiştir seni örnek varsayalım) sstephenson en biraz daha karmaşık:

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 saniye? Hiçbir zaman derlemek için uzun süren bir CoffeeScript projesi almadım. Veya bu konuda 2 saniye bile. Her bir ".coffee" dosyanızın derlenmesini ve derlemek için hangisinin (varsa) 1'den fazla aldığını görmeyi deneyebilir misiniz? Ardından [issue tracker] 'a bir rapor gönderin (https://github.com/jashkenas/coffee-script/issues). –

+0

Muhtemelen derleme değil - belki de node.js yüküdür? 8 tane yüklüyorum ya da gerektiriyor. Testin kendisi yaklaşık 300 ms'de çalışıyor gibi görünüyor. –

+1

Yani, testlerde 8'i yani 'require's yükleniyor musunuz? Birkaç milisaniyeden daha fazlasını aldığını görmek için her birini zamanlamaya çalışabilir misiniz? 'execvp(): –

cevap

1

benim connect-varlıklar proje için Cakefile bir göz atın Ancak, değişiklikler için bir dosya dizini nasıl izleyebileceğinizi ve testleri yeniden test ederek bu değişikliklere nasıl yanıt verebileceğinizi gösterir.

+0

(> 0.6.4 0.4.12- hareketli) bir node.js sorunu dışarı sıraladıktan sonra, bazı senin Cakefile çalışan hataları alıyorum Böyle bir dosya veya dizin \t (düğüm) uyarı : olası EventEmitter bellek sızıntısı tespit edildi. 11 dinleyici eklendi. Limiti artırmak için emitter.setMaxListeners() öğesini kullanın. \t İzleme: \t WatchitEmitter adresinde. (events.js: 133: 17) Object.oncomplete de /Users/chambery/node_modules/watchit/lib/watchit.js:35:13 \t de \t (/ Kullanıcılar/chambery/node_modules/Watchit/lib/Watchit .js: 141: 21) \t FATAL ERROR: v8 :: HandleScope :: Close() Yerel kapsam zaten kapatıldı 'Bu bir sürüm sorun mu? –

+0

Hmm. Bunu çoğaltmak için bir test vakası oluşturabilirseniz, lütfen bunu [watchit issue tracker] (https://github.com/TrevorBurnham/watchit/issues) adresinden bir hata raporu olarak gönderin. –

+0

Cakefile'niz hile yapar. Testi tamamıyla çalıştırmak için hala alamıyorum, ancak FATAL ERROR, düğüm yükseltmesinin neden olduğu bir bağlantı hatası (?) Nedeniyle: http://groups.google.com/group/nodejs/browse_thread/thread/ 877ff6e7434826dd –

İlgili konular