JavaScript — CasperJs не выполняется полностью из переполнения стека

Образец теста CasperJs:

casper.test.begin('Hello, Test!', 1, function(test) {
test.assert(true);
test.done();
});

Результат выполнения команды Linux:

# casperjs test /bin/casper-test.js
Test file: /bin/casper-test.js
# Hello, Test!
PASS Subject is strictly true
PASS Hello, Test! (1 test)
PASS 1 test executed in 0.026s, 1 passed, 0 failed, 0 dubious, 0 skipped.

Результат PHP:

<?php
echo exec('casperjs test /path/to/casper-test.js');
?>
[37;42;1mPASS 1 test executed in 0.024s, 1 passed, 0 failed, 0 dubious, 0 skipped. [0m

Как видите, он показывает только последнюю строку результата команды Linux (правильный).
Есть идеи?

2

Решение

Проверьте документацию для exec:

http://php.net/manual/en/function.exec.php

строка exec (строка $ command [, массив &$ output [, int &$ return_var]])

Чтобы захватить весь вывод, вы должны сделать что-то вроде этого:

exec('casperjs test /path/to/casper-test.js 2>&1', $output, $return_var);
var_dump($output);
var_dump($return_var);

Прикрепление 2>&1 к вашей команде перенаправит STDERR а также STDOUT и захватить его в $output переменная.

Кроме того, я заметил, что вывод, кажется, пытается раскрасить его для вывода на оболочке, вот что [37;42; Строка Согласно документации, похоже, что вы можете добавить --no-colors на вашу команду, чтобы отключить цветной вывод:

casperjs test --no-colors  /path/to/casper-test.js 2>&1
2

Другие решения

Других решений пока нет …