Grunt任务 - 等待服务器(selendroid)准备好

时间:2015-01-06 23:44:49

标签: javascript gruntjs server

我想等待服务器准备好,然后在它上面运行任务

编辑: 我已经找到了一些。我正在为我的字符串正确过滤。但是,如何在后台运行它,并在grunt序列完成后终止它?

考虑 grunt common server spec-e2e 这将运行常见任务,运行grunt服务器,然后(不停止服务器)在顶部运行下一个任务。完成所有这些操作后,它会自动关闭服务器。

这就是我想要创建的那种功能。

1 个答案:

答案 0 :(得分:0)

我学到了几个要点:

  • 从节点开始的进程 - 例如require('child_process').spawn(...) - 将继续运行所有后续的grunt任务(一旦完成单个任务,它们就不会被关闭)。
  • 一旦grunt完成任务序列的运行,它将终止所有衍生的进程。

因此,grunt selendroid:selendroid.jar spec-e2e任务启动服务器的命令selendroid将使服务器保持运行,直到spec-e2e任务完成。

我的selendroid任务的代码是:

grunt.registerTask('selendroid', 'Start selendroid server', function (appLocation) {
    var done = this.async();
    var timeout = setTimeout(function() {
        console.log('Selendroid took too long to start');
        done(false);
    }, 30000);

    function checkLoaded(data) {
        data = data.toString();
        if (data.indexOf('Selendroid standalone server has been started on port') > -1) {
            clearTimeout(timeout);
            done();
        }
    }

    if (typeof appLocation === 'undefined') {
        console.log('App to test not set, aborting...'.red);
        done(false);
    }

    var cmd = require('child_process').spawn('java', ['-jar', 'selendroid.jar', '-app', appLocation]);
    cmd.stdout.on('data', function(data) {
        checkLoaded(data);
    });
    cmd.stderr.on('data', function(data) {
        checkLoaded(data);
    });
});