Я запускаю модульные тесты с использованием QUnit и пытаюсь интегрировать QUnit в нашу автоматизацию построения и непрерывную интеграцию. Чтобы Atlassian Bamboo проанализировал тестовый результат, он должен иметь тестовый выход в XML файле. Я могу создать консольный журнал, который находится в требуемом формате xml, используя плагин qunit-reporter-junit. Когда 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 plugin (который просто передает входной html в новый файл):
gulp.task('qunit', function() {
return gulp.src('./qunit/test-runner.html')
.pipe(qunit())
.pipe(out('build.xml');
});
XML находится прямо на экране, мне просто нужно как-то его вставить в файл.
Оказывается, фантом js принимает узловые сценарии, которые будут выполняться при выполнении. Я в основном взял сценарий run-qunit из каталога примеров phantom-js и скорректировал его для вывода консольного вывода в файл 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 может читать как часть своего процесса.