Проблема в том, что mocha, как и многие программы командной строки, отключит вывод цвета, если увидит, что выводимая информация не является терминалом.Это происходит потому, что в противном случае при передаче по каналу файл будет заполнен последовательностями управления цветом вместе с отображаемым текстом.
Таким образом, проблема не в узле, а скорее в мокко.Решение в этом случае состоит в том, что у 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.Это означает, что mocha проверит эти потоки, увидит, что они не являются терминалами, и отключит цвета.Причина того, что customFds
работает, заключается в том, что он передает точные потоки, которые узел получает в process.stdin
, process.stdout
и process.stderr
, в дочерний процесс, поэтому, когда mocha проверяет, являются ли потоки терминалами, они будут, потому чтопотоки - это фактический терминал.
Я знаю, что вы ищете другое решение, но я не думаю, что вы найдете его.Вы либо явно указываете mocha использовать цвета, либо mocha должен думать, что его потоки являются терминалами, и единственный реальный способ сделать это - через customFds
, который, как вы сказали, устарел.