execFile没有被调用

时间:2014-12-15 23:52:06

标签: phantomjs mocha execfile

我遇到了问题,甚至不确定从何处开始进行故障排除。

我正在使用slightly modified mocha-casperjs。 CasperJS是PhantomJS的包装器。我正在尝试在完成测试时整合Growl通知。

我可以在调用mocha.run之前成功执行通知,如下所示:

execFile("terminal-notifier", ["-message", "Tests Begin"], null, function (err, stdout, stderr) {
  console.log("execFileSTDOUT:", JSON.stringify(stdout))
  console.log("execFileSTDERR:", JSON.stringify(stderr))
})



// for convience, expose the current runner on the mocha global
    mocha.runner = mocha.run(function() {
    ...

然而,这失败了:

// for convience, expose the current runner on the mocha global
mocha.runner = mocha.run(function() {
    execFile("terminal-notifier", ["-message", "Tests Begin"], null, function (err, stdout, stderr) {
      console.log("execFileSTDOUT:", JSON.stringify(stdout))
      console.log("execFileSTDERR:", JSON.stringify(stderr))
    })
    ...

我对Mocha或PhantomJS的胆量知之甚少。 Mocha可以吃stdout或类似的东西,导致execFile调用失败吗?还有其他我没有得到的东西吗?

谢谢, 凯文

---更新---

情节变浓。只包含casper对象就会杀死execFile。

使用“casperjs test.js”运行以下代码会成功输出execFile。取消注释casper对象会导致无输出。

'use strict';
var process = require("child_process");
var spawn = process.spawn;
var execFile = process.execFile;

execFile("ls", ["-lF", "/usr"], null, function (err, stdout, stderr) {
  console.log("execFileSTDOUT:", JSON.stringify(stdout));
  console.log("execFileSTDERR:", JSON.stringify(stderr));
});

//var casper = require('casper').create();
//casper.exit();

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。 execFile以异步方式运行,因此您需要给它一个执行的机会。通过立即退出CasperJS,没有输出因为ls没有完成,因此没有调用回调。一种解决方法是使用setTimeout。这是我在PhantomJS中所做的。我认为CasperJS会是一样的。

'use strict';
var process = require("child_process");
var spawn = process.spawn;
var execFile = process.execFile;

execFile("ls", ["-lF", "/usr"], null, function (err, stdout, stderr) {
  console.log("execFileSTDOUT:", JSON.stringify(stdout));
  console.log("execFileSTDERR:", JSON.stringify(stderr));
});

setTimeout(function() { phantom.exit(0) },1000);

答案 1 :(得分:-1)

您可以尝试将日志行更改为此日期:

console.log("execFileSTDOUT:" + JSON.stringify(stdout));

然后,您应该看到,如果调用了execFile: execFileSTDOUT: “”