我正在使用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就在屏幕上,我只需要以某种方式将其放入文件中。
答案 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文件。