功能步骤中的Cucumber JS child_process

时间:2014-02-19 12:09:53

标签: node.js cucumber cucumberjs

我正在尝试编写一些CucumberJS功能,它将测试我正在创建的NodeJS命令行应用程序,但是我遇到了能够在功能步骤中执行child_process的问题。

只是为了获得概念验证工作,我试图执行ls -l命令。

我的代码是;

var ChildProcess = require('child_process');

function execCmd() {

  console.log('Testing command...');
  var bin = ChildProcess.exec('ls -l', { timeout: 5 }, function(error, stdout, stderr) {
    console.log('executing...');
    console.log(error);
    console.log(stdout);
    console.log(stderr);
  });

  bin.on('exit', function(code) {
    console.log('Code: ' + code);
  });
}

module.exports = function() {

  this.Given(/^I am on the command line$/, function(callback) {
    execCmd();
    callback();
  });

}

执行cucumber-js不会从执行的命令输出任何内容。输出如下;

Testing command...
.

1 scenario (1 passed)
1 step (1 passed)

但是如果我只是在函数定义之后调用execCmd(),删除module.exports块并运行node cli.js我会正确看到输出(即文件列表)。

我见过how to access stdout,stderr, and error in cucumber.js step definition using nodejs child_process exec,它没有回答这个问题,只是简单地说明了如何执行命令,并且没有特定的内容在CucumberJS步骤中运行它。

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为这个问题是由几件事引起的:

  1. 回调 Given 中调用,基本上在完成子进程执行之前退出了cucumberjs程序。
  2. 在分配'on'事件处理程序时,将覆盖传递到 exec()的出口委托。
  3. 我相信这会解决您的问题:

    var ChildProcess = require('child_process');
    
    function execCmd(cb) {
    
      console.log('Testing command...');
      var bin = ChildProcess.exec('ls -l', {timeout:5}, function(error, stdout, stderr) {
        console.log('executing...');
        console.log(error);
        console.log(stdout);
        console.log(stderr);
        cb();
      });
    }
    
    module.exports = function() {
    
      this.Given(/^I am on the command line$/, function(callback) {
        execCmd(callback);
      });
    
    }