2011-12-01 53 views
5

我在寫一個(更大的)使用Coffeescript和node.js的單元測試集。我建立使用咖啡的文件「監視」選項(-w)如何在Coffeescript中連續編譯/單元測試?

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

我的問題是運行單元測試需要20秒(我假設爲編譯到.js文件)。

如果可能的話,我想自動運行(編譯的.js)文件更改的單元測試,這將消除長時間等待結果。

我目前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

哇 - 20秒?我從來沒有一個花費那麼長時間編譯的CoffeeScript項目。甚至2秒,就此而言。你可以嘗試編譯你的每個'.coffee'文件,看看哪個(如果有的話)需要超過1秒才能編譯?然後發佈報告到[問題跟蹤器](https://github.com/jashkenas/coffee-script/issues)。 –

+0

這可能不是編譯 - 也許它是node.js開銷?我正在加載8個左右的需求。測試本身似乎在約300ms內執行。 –

+1

你的意思是你在測試中加載了8個左右'require's?你可以嘗試對他們每個人進行計時,看看哪些時間超過幾毫秒? –

回答

1

看看在Cakefile我的連接資產項目:https://github.com/adunkman/connect-assets/blob/master/Cakefile

這是一個有點比sstephenson的更復雜(我假設源自你的例子) ,但它顯示瞭如何通過重新運行測試來觀察文件的更改目錄並對這些更改作出響應。

+0

在整理出一個node.js問題(從0.4.12-> 0.6.4移動)後,我得到一些運行你的Cakefile的錯誤: execvp():沒有這樣的文件或目錄 \t(node)warning :檢測到可能的EventEmitter內存泄漏。添加了11位聽衆。使用emitter.setMaxListeners()來增加限制。 \t Traceit: \t at WatchitEmitter。 (events.js:133:17) \t在/Users/chambery/node_modules/watchit/lib/watchit.js:35:13 \t在Object.oncomplete(/用戶/貝里/ node_modules/watchit/LIB/watchit .js:141:21) \t致命錯誤:v8 :: HandleScope :: Close()本地範圍已被關閉這是版本問題嗎? –

+0

嗯。如果您可以創建一個測試用例來複制此內容,請將其作爲[watchit問題跟蹤器](https://github.com/TrevorBurnham/watchit/issues)上的錯誤報告發布。 –

+0

你的Cakefile會訣竅。我仍然無法完全運行測試,但是致命錯誤是由於鏈接器錯誤(?)導致節點升級造成的:http://groups.google.com/group/nodejs/browse_thread/thread/ 877ff6e7434826dd –