Ответ 1
Проблема заключается в том, что mocha, как и многие программы командной строки, отключит вывод цвета, если увидит, что вещь, которую он выводит, не является терминалом. Он делает это, потому что в противном случае, если вы перенаправляетесь в файл, файл будет заполнен последовательностями управления цветом вместе с отображаемым текстом.
Таким образом, проблема не связана с node и более с моккой. Решение в этом случае состоит в том, что mocha имеет аргумент --colors
для принудительного вывода цвета. Так что это должно сработать.
task 'test', 'test project', (options) ->
fetchTestFiles './test', (err,files) ->
files.unshift '--colors'
mocha = spawn 'mocha', files
mocha.stdout.pipe(process.stdout, end: false)
Обычно, когда вы создаете процесс, новые потоки данных выделяются для дочерних stdin, stdout и stderr. Это означает, что мокка проверит эти потоки, увидит, что они не являются терминалами, и отключить цвета. Причина, по которой работает customFds
, заключается в том, что она передает точные потоки, которые node получает в process.stdin
, process.stdout
и process.stderr
для дочернего процесса, поэтому, когда mocha проверяет, являются ли потоки терминалами, они будут потому что потоки являются фактическим терминалом.
Я знаю, что вы ищете другое решение, но я не думаю, что вы его найдете. Вы либо явно говорите мокко о том, как использовать цвета, либо мокко должно думать, что потоки являются терминалами, и единственный реальный способ сделать это - через customFds
, который устарел, как вы сказали.