如何在Coffeescript中进行持续构建/单元测试?

5

我正在使用Coffeescript和node.js编写越来越多的单元测试。我使用coffee的“watch”选项(-w)构建文件。

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秒才能编译完成。然后将报告发布到问题跟踪器中。 - Trevor Burnham
可能不是编译的问题,也许是node.js的开销?我正在加载8个或更多的requires。测试本身似乎在约300毫秒内执行。 - Todd Chambery
1
你的意思是测试中加载了8个或更多的“require”模块吗?你能否尝试计时每个模块,看看哪个花费的时间超过几毫秒? - Trevor Burnham
1个回答

1

解决了一个node.js问题(从0.4.12->0.6.4),运行您的Cakefile时出现一些错误:execvp():没有那个文件或目录 (node)警告:可能检测到EventEmitter内存泄漏。添加了11个侦听器。使用emitter.setMaxListeners()来增加限制。 跟踪: 在WatchitEmitter.<anonymous>(events.js:133:17) 在/Users/chambery/node_modules/watchit/lib/watchit.js:35:13上 在Object.oncomplete(/Users/chambery/node_modules/watchit/lib/watchit.js:141:21) 致命错误:v8 :: HandleScope :: Close()本地范围已经关闭 这是版本问题吗? - Todd Chambery
如果您能够创建一个测试用例来复制这个问题,请在watchit问题跟踪器上发布此bug报告。 - Trevor Burnham
你的Cakefile搞定了这件事。我仍然不能完全运行测试,但致命错误是由链接器错误(?)引起的,这是由node升级引起的:http://groups.google.com/group/nodejs/browse_thread/thread/877ff6e7434826dd - Todd Chambery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接