咖啡脚本cakefile任务没有完成

时间:2011-11-14 22:02:36

标签: node.js selenium coffeescript spawn

我有以下cakefile任务来运行selenium测试,这些测试成功运行并且到达测试结束但是没有退出。

muffin = require 'muffin'
wrench = require 'wrench'
http   = require 'http'
fs     = require 'fs'
spawn  = require('child_process').spawn
exec   = require('child_process').exec

task 'selenium', 'run selenium tests', (options) ->
    sel = require './test/selenium'
    app = spawn 'node', ['app.js']
    app.stdout.on 'data', (data) ->
        if /listening on port/.test data
            selenium = spawn 'selenium'
            selenium.stdout.on 'data', (data) ->
                console.log 'stdout: ' + data
                if /Started.*jetty.Server/.test data
                    sel.run ->
                        app.stdin.end()
                        selenium.stdin.end()
                        console.log 'completed Selenium Tests'

有没有办法告诉任务完成?我在控制台中记录了“已完成的Selenium测试”。

3 个答案:

答案 0 :(得分:2)

如果两个子进程中的一个(appselenium)仍在运行,则主进程将继续运行。在他们上面调用stdin.end()不会改变这一点。你想要做的是用适当命名的kill method

强迫他们死去
app.kill()
selenium.kill()
console.log 'completed Selenium Tests'

答案 1 :(得分:0)

特雷弗伯纳姆指出我正确的方向。但是潜在的问题是我生成的selenium子进程是一个运行java进程的shell脚本。所以基本上在调用app.kill()时它会杀死shell脚本而不是底层的java进程。

感谢您的帮助。

答案 2 :(得分:0)

另一种选择是致电process.exit()。虽然,我不确定这对孩子有什么影响。