我正在尝试编写一些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步骤中运行它。
谢谢!
答案 0 :(得分:2)
我认为这个问题是由几件事引起的:
我相信这会解决您的问题:
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);
});
}