将 gulp-qunit 控制台输出输出到文件

Posted

技术标签:

【中文标题】将 gulp-qunit 控制台输出输出到文件【英文标题】:Output gulp-qunit console output to file 【发布时间】:2018-05-02 04:53:51 【问题描述】:

我正在使用 QUnit 运行单元测试,并尝试将 QUnit 集成到我们的构建自动化和持续集成过程中。为了让 Atlassian Bamboo 解析测试输出,它要求测试输出位于 xml 文件中。我可以使用 qunit-reporter-junit 插件生成所需 xml 格式的控制台日志。当 Gulp-QUnit 运行我们的 test-runner.html 文件时,它会将 console.log 输出到屏幕上。我的问题是我找不到将这个 console.log 输出通过管道传输到文件中的方法。

我尝试了以下方法:

使用 gulp-log-capture 插件(什么都不做):

  gulp.task('qunit', function() 

  return gulp.src('./qunit/test-runner.html')
      .pipe(logCapture.start(console,'log'))
      .pipe(qunit())
      .pipe(logCapture.stop('build.xml'));
);

将输出通过管道传输到写入流中(这会引发错误):

gulp.task('qunit', function() 

  return gulp.src('./qunit/test-runner.html')
      .pipe(qunit())
      .pipe(fs.createWriteStream('build.xml));
);

使用 gulp-out 插件(它只是将输入的 html 通过管道传输到新文件中):

gulp.task('qunit', function() 

  return gulp.src('./qunit/test-runner.html')
      .pipe(qunit())
      .pipe(out('build.xml');
);

XML 就在屏幕上,我只需要以某种方式将其放入文件中。

【问题讨论】:

【参考方案1】:

事实证明,phantom js 采用将在执行时运行的类似节点的脚本。我基本上从 phantom-js 的示例目录中获取了 run-qunit 脚本,并将其调整为将控制台输出通过管道传输到 build.xml 文件中。示例脚本可以在这里找到:https://github.com/ariya/phantomjs/blob/master/examples/run-qunit.js

我只是像这样调整了 onConsoleMessage 监听器 (ln48):

page.onConsoleMessage = function(msg)         
    if( msg.search(/xml/) > -1 ) 
        fs.write('build.xml',msg);
    
    console.log(msg);
;

为了让它作为自动构建过程的一部分运行,我在 Gulp 中使用 exec 插件运行以下任务。

exec = require('child_process').exec;
.
.
.
gulp.task('phantom',function() 
    exec('phantomjs ./qunit/run-qunit.js ./qunit/test-runner.html');
);

这两项调整都成功创建了一个 build.xml 文件,Atlassian Bamboo 可以在其进程中读取该文件。

【讨论】:

以上是关于将 gulp-qunit 控制台输出输出到文件的主要内容,如果未能解决你的问题,请参考以下文章

Golang将日志同时输出到控制台和文件

将输出重定向到文件,然后返回到 Java 中的控制台

将 Visual C++ 控制台输出复制(不重定向)到文本文件,同时仍在控制台窗口中查看输出

我们如何将 Java 程序控制台输出重定向到多个文件?

将控制台应用程序输出获取到 xml 文件并保存文件 [重复]

如何将java控制台的输出内容存入到文本文件中