coffee script cakefile задача не завершается


У меня есть следующая задача 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'

Есть ли способ, которым я могу сказать задаче, чтобы она закончилась? Я получаю "завершенные тесты Селена", зарегистрированные в консоли.

3 3

3 ответа:

Если один из двух дочерних процессов (app и selenium) все еще работает, основной процесс будет продолжать работать. Вызов stdin.end() на них ничего не меняет. То, что вы хотите сделать, это заставить их умереть, с метко названным методом убийства:

app.kill()
selenium.kill()
console.log 'completed Selenium Tests'

Тревор Бернем, указал мне в правильном направлении. Но основная проблема заключалась в том, что дочерний процесс selenium, который я создавал, был сценарием оболочки, запускающим процесс java. Так что в основном при вызове приложения.kill() это убивало сценарий оболочки, но не лежащий в основе процесс java.

Спасибо за помощь.

Другой вариант-вызвать process.exit(). Хотя я не уверен, как это влияет на детей.