我有一个充满Selenium测试的mocha文件。当我像命令行一样从命令行运行mocha时,由于colors模块,我得到了这个很好的格式化和彩色化输出。
这看起来很棒,效果非常好,但手动运行只针对单个环境运行测试。为了在多个环境中并行运行测试,Sauce Labs(Selenium云托管)建议生成mocha子进程。我在项目中将其构建为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.log
和console.error
process.stdout.write
和process.stderr.write
来解决问题。
你可以看到从gulp打印的线条是彩色的并且工作正常,但是它产生儿童处理的那一刻,从那里打印的任何线条都会失去它们的颜色。这不是世界末日,但现在我很好奇发生了什么以及如何解决它。我已经学习了一些关于ANSI转义码的知识,但我仍然对正在发生的事情感到困惑。有什么建议吗?
答案 0 :(得分:1)
所以我发现了这个问题: Node.js spawn with colors?
看起来这是Mocha的一个问题,它正在检测它的输出不会是标准输出。您需要专门启用颜色:
exec('mocha ./test/test-runner.js --colors')