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

时间:2018-05-02 04:53:52

标签: javascript unit-testing gulp bamboo qunit

我正在使用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 个答案:

答案 0 :(得分:1)

事实证明,幻影js采用了类似节点的脚本,这些脚本将在执行时运行。我基本上从phantom-js的examples目录中获取了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');
});

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