Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added support to include TestSuite in filename, with config setting i… #102

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Expand Up @@ -33,7 +33,8 @@ module.exports = function(config) {
useBrowserName: true, // add browser name to report and classes names
nameFormatter: undefined, // function (browser, result) to customize the name attribute in xml testcase element
classNameFormatter: undefined, // function (browser, result) to customize the classname attribute in xml testcase element
properties: {} // key value pair of properties to add to the <properties> section of the report
properties: {}, // key value pair of properties to add to the <properties> section of the report
includeTestSuiteInFilename: true // if true appends the name of the testsuite to the file, $outputFile_Test-Suite.
}
});
};
Expand Down
21 changes: 21 additions & 0 deletions index.js
Expand Up @@ -18,6 +18,7 @@ var JUnitReporter = function (baseReporterDecorator, config, logger, helper, for
var useBrowserName = reporterConfig.useBrowserName
var nameFormatter = reporterConfig.nameFormatter || defaultNameFormatter
var classNameFormatter = reporterConfig.classNameFormatter
var includeTestSuiteInFilename = reporterConfig.includeTestSuiteInFilename || false
var properties = reporterConfig.properties

var suites
Expand Down Expand Up @@ -83,6 +84,10 @@ var JUnitReporter = function (baseReporterDecorator, config, logger, helper, for
return // don't die if browser didn't start
}

if (includeTestSuiteInFilename && path.parse) {
newOutputFile = appendTestSuiteName(newOutputFile, xmlToOutput.suiteName)
}

pendingFileWritings++
helper.mkdirIfNotExists(path.dirname(newOutputFile), function () {
fs.writeFile(newOutputFile, xmlToOutput.end({pretty: true}), function (err) {
Expand All @@ -99,6 +104,20 @@ var JUnitReporter = function (baseReporterDecorator, config, logger, helper, for
})
}

var appendTestSuiteName = function (filePath, testSuiteName) {
var parsedPath = path.parse(filePath)
var filename

if (testSuiteName) {
testSuiteName = testSuiteName.replace(/[^a-z0-9]/gi, '_')
testSuiteName = '_' + testSuiteName
}

filename = parsedPath['name'] + testSuiteName + parsedPath['ext']

return path.join(parsedPath['root'], parsedPath['dir'], filename)
}

var getClassName = function (browser, result) {
var browserName = browser.name.replace(/ /g, '_').replace(/\./g, '_') + '.'

Expand Down Expand Up @@ -161,6 +180,8 @@ var JUnitReporter = function (baseReporterDecorator, config, logger, helper, for
spec.ele('failure', {type: ''}, formatError(err))
})
}

testsuite.suiteName = result.suite[0] ? result.suite[0] : ''
}

// wait for writing all the xml files, before exiting
Expand Down
40 changes: 39 additions & 1 deletion test/reporter.spec.js
Expand Up @@ -4,6 +4,7 @@ var chai = require('chai')
var expect = require('chai').expect
var sinon = require('sinon')
var proxyquire = require('proxyquire')
var semver = require('semver')

chai.use(require('sinon-chai'))

Expand All @@ -21,7 +22,8 @@ var fakeHelper = {
var fakeConfig = {
basePath: __dirname,
junitReporter: {
outputFile: ''
outputFile: '',
includeTestSuiteInFilename: true
}
}

Expand Down Expand Up @@ -104,4 +106,40 @@ describe('JUnit reporter', function () {
// never pass a null value to XMLAttribute via xmlbuilder attr()
expect(reporter.onBrowserComplete.bind(reporter, badBrowserResult)).not.to.throw(Error)
})

it('should include testsuite name in filename', function () {
var fakeBrowser = {
id: 'Android_4_1_2',
name: 'Android',
fullName: 'Android 4.1.2',
lastResult: {
error: false,
total: 1,
failed: 0,
netTime: 10 * 1000
}
}

var fakeResult = {
suite: [
'Test:Suite',
'using it',
'get request'
],
description: 'should not fail',
log: []
}

reporter.onRunStart([ fakeBrowser ])
reporter.specSuccess(fakeBrowser, fakeResult)
reporter.onBrowserComplete(fakeBrowser)
reporter.onRunComplete()

if (semver.gtr(process.versions.node, '0.11.0', '0.10.0')) {
var filePath = fakeFs.writeFile.firstCall.args[0]
expect(filePath).to.have.string('_Test_Suite')
} else {
this.skip()
}
})
})