3

セレンテストを実行するための次のcakefileタスクがあります。これは正常に実行され、テストの最後に到達しますが、終了しません。

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テスト」がコンソールに記録されます。

4

3 に答える 3

2

2つの子プロセス(appおよびselenium)のいずれかがまだ実行中の場合、メインプロセスは実行を継続します。それらを呼び出しstdin.end()ても、これは変わりません。あなたがしたいのは、適切な名前のkillメソッドを使用して、それらを強制的に強制終了することです。

app.kill()
selenium.kill()
console.log 'completed Selenium Tests'
于 2011-11-14T23:29:44.140 に答える
0

Trevor Burnham さんが、私を正しい方向に向けてくれました。しかし、根本的な問題は、私が生成していたセレンの子プロセスが、Java プロセスを実行するシェル スクリプトであったことでした。したがって、基本的に app.kill() を呼び出すと、シェルスクリプトは強制終了されましたが、基になる Java プロセスは強制終了されませんでした。

助けてくれてありがとう。

于 2011-11-16T11:08:40.533 に答える
0

別のオプションは、 を呼び出すことprocess.exit()です。ただし、子供への影響はわかりません。

于 2013-10-03T22:32:34.760 に答える