2014-12-15 3 views
4

У меня проблема, и даже не знаю, с чего начать поиск неисправностей.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)) 
    }) 
    ... 

Я много о внутренностях Мокко не знаю , или PhantomJS. Может ли Моха есть еду или что-то в этом роде, заставляя вызов execFile терпеть неудачу? Что-то еще я не получаю?

Спасибо, Kevin

--- UPDATE ---

Участок утолщается. Просто включая объект убийцы убивает 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(); 
+1

Как это происходит? Вы получили сообщение об ошибке? Исключение? Это просто не выполняется? – Louis

+2

Насколько я могу судить, ничего нет. Нет никаких ошибок и исключений. Обратный вызов никогда не вызван. – thekevinscott

ответ

-1

Вы можете попытаться изменить линию журнала к этому:

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

Затем вы должны увидеть, если ExecFile называется: execFileSTDOUT: ""

1

Я побежал в то же самое вопрос. execFile работает асинхронно, поэтому вам нужно дать ему возможность выполнить. Выйдя из CasperJS сразу, выхода нет, потому что ls не закончил, и поэтому callback не был вызван. Одна работа заключается в использовании 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); 
Смежные вопросы