从生成的subprocess运行脚本时,如何在控制台中保留颜色?

我有一个充满seleniumtesting的摩卡文件。 当我从正常的命令行运行摩卡时,由于颜色模块,我得到了这个不错的格式化和彩色输出。

这看起来不错,工作起来很奇妙,但手动运行只能在单个环境下运行testing。 为了在多个环境中并行运行testing,Sauce Labs(Selenium云托pipe)build议产生摩卡subprocess。 我在我们的项目中build立了一个Gulp任务。

gulp.task('test', function () { var targets = [ 'windows.chrome', 'windows.firefox', 'windows.ie', 'mac.chrome', 'mac.firefox', 'mac.safari', 'linux.chrome', 'linux.firefox' ]; function run_mocha(target, done) { var env = Object.assign({}, process.env); env.TARGET = target; var mocha = exec('mocha ./test/test-runner.js', {env: env}, done); ['stdout', 'stderr'].forEach((stream) => mocha[stream].on('data', (data) => process[stream].write(`${target}:${data}`)) ); } var jobs = targets.map( (target) => new Promise( (resolve, reject) => run_mocha(target, resolve) ) ); return Promise.all(jobs).then(() => { console.log('ALL SUCCESSFUL'); }); }); 

这个工程很好,但输出完全失去了色彩。 它也注入了多余的换行符,但是我可以通过换出console.logconsole.error来修复process.stdout.writeprocess.stderr.write

您可以看到,从饮料中打印的线条被着色并且工作正常,但是一旦它产生,那么subprocess中的任何行都会丢失颜色。 这不是世界末日,但是现在我好奇发生了什么事以及如何解决这个问题。 我学习了一些关于ANSI转义代码的知识,但是我仍然对发生的事情感到困惑。 有什么build议么?

所以我发现这个问题: Node.js产生的颜色?

看起来这是Mocha的问题,在那里它检测到它的输出不会是标准输出。 您需要专门启用颜色:

exec('mocha ./test/test-runner.js --colors')