javascript - 从生成的子进程运行脚本时如何在控制台中保留颜色?

标签 javascript node.js stream mocha.js child-process

<分区>

我有一个充满 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');
  });
});

效果很好,但输出完全失去了色彩。它还注入(inject)了多余的换行符,但我能够通过将 console.logconsole.error 换成 process.stdout.write 来解决这个问题和 process.stderr.write

您可以看到从 gulp 打印的线条是彩色的并且工作正常,但是在它生成子进程的那一刻,从那里打印的任何线条都会失去颜色。这不是世界末日,但现在我很好奇发生了什么以及如何解决它。我已经了解了一些关于 ANSI 转义码的知识,但我仍然对发生的事情感到很困惑。有什么建议吗?

最佳答案

所以我发现了这个问题: Node.js spawn with colors?

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

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

关于javascript - 从生成的子进程运行脚本时如何在控制台中保留颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32955337/

相关文章:

javascript - 尝试使用 Shuffle.js 但出现 Uncaught TypeError : Shuffle is not a constructor

node.js - 一个项目中的快速 session 和代币

java - 如何使用ini4j编写ini文件

Java ProcessBuilder如何捕获来自进程的文件读取请求并作为流提供?

node.js - 安装 angular/cli 崩溃并出现错误 404

C# 将 2 个流合并为一个

javascript - 如何从对象数组中获取值

javascript - 使用 CSS 和 JS 进行适当的分词

javascript - 无法替换 [] 和 ;在上传文件的文件名中

node.js - 部署 Node.js Web 应用程序时最重要的统计数据是什么?