Converts CucumberJS JSON output into JUnitXML for software like Jenkins to read.
cucumber-junit should be added to your test codebase as a dev dependency. You can do this with:
$ npm install --save-dev cucumber-junitAlternatively you can manually add it to your package.json file:
{
"devDependencies" : {
"cucumber-junit": "latest"
}
}then install with:
$ npm install --devcucumber-junit should be appended to your existing Cucumber.JS commands
$ node_modules/.bin/cucumber-js --format=json | node_modules/.bin/cucumber-junit > output_JUnit.xmlThe following options are supported by lib/cucumber_junit:
- strict - if true, pending or undefined steps will be reported as failures
- indent - passed to the [XML formatter][XML], defaults to 4 spaces
- stream - passed to the [XML formatter][XML] to return the result as a stream
- declaration - passed to the [XML formatter][XML]
- prefix - added to each test suite name (if test are executed against multiple browsers/devices)
These options can be specified on the command line when calling .bin/cucumber-junit:
-sor--strict-i 4or--indent 4-e UTF-8or--encoding "UTF-*"- applied to the XML declaration
cucumber-junit can be called from Gulp:
gulp.task('cucumber:report', ['cucumber'], function() {
gulp.src('test-reports/cucumber.json')
.pipe(cucumberXmlReport({strict: true}))
.pipe(gulp.dest('test-reports'));
});
function cucumberXmlReport(opts) {
var gutil = require('gulp-util'),
through = require('through2'),
cucumberJunit = require('cucumber-junit');
return through.obj(function (file, enc, cb) {
// If tests are executed against multiple browsers/devices
var suffix = file.path.match(/\/cucumber-?(.*)\.json/);
if (suffix) {
opts.prefix = suffix[1] + ';';
}
var xml = cucumberJunit(file.contents, opts);
file.contents = new Buffer(xml);
file.path = gutil.replaceExtension(file.path, '.xml');
cb(null, file);
});
}MIT © St. John Johnson [XML]: https://www.npmjs.com/package/xml#options