Skip to content

Commit

Permalink
Fix for test name to contain parent suite(s) names.
Browse files Browse the repository at this point in the history
This fixes issue reported in #62 where test names doesn't include parent test suites in the generated report.

Also created minimal unit test setup.
  • Loading branch information
phillipj committed Mar 7, 2016
1 parent 8cd1730 commit fe69381
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 5 deletions.
17 changes: 15 additions & 2 deletions gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,27 @@ module.exports = function (grunt) {
eslint: {
target: [
'index.js',
'gruntfile.js'
'gruntfile.js',
'test/*.js'
]
},
simplemocha: {
options: {
ui: 'bdd',
reporter: 'dot'
},
unit: {
src: [
'test/*.spec.js'
]
}
}
})

require('load-grunt-tasks')(grunt)

grunt.registerTask('default', ['eslint'])
grunt.registerTask('test', ['simplemocha'])
grunt.registerTask('default', ['eslint', 'test'])

grunt.registerTask('release', 'Bump the version and publish to NPM.', function (type) {
grunt.task.run([
Expand Down
9 changes: 7 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,19 @@ var path = require('path')
var fs = require('fs')
var builder = require('xmlbuilder')

// concatenate test suite(s) and test description by default
function defaultNameFormatter (browser, result) {
return result.suite.join(' ') + ' ' + result.description
}

var JUnitReporter = function (baseReporterDecorator, config, logger, helper, formatError) {
var log = logger.create('reporter.junit')
var reporterConfig = config.junitReporter || {}
var pkgName = reporterConfig.suite || ''
var outputDir = reporterConfig.outputDir
var outputFile = reporterConfig.outputFile
var useBrowserName = reporterConfig.useBrowserName
var nameFormatter = reporterConfig.nameFormatter
var nameFormatter = reporterConfig.nameFormatter || defaultNameFormatter
var classNameFormatter = reporterConfig.classNameFormatter

var suites
Expand Down Expand Up @@ -127,7 +132,7 @@ var JUnitReporter = function (baseReporterDecorator, config, logger, helper, for

this.specSuccess = this.specSkipped = this.specFailure = function (browser, result) {
var spec = suites[browser.id].ele('testcase', {
name: typeof nameFormatter === 'function' ? nameFormatter(browser, result) : result.description,
name: nameFormatter(browser, result),
time: ((result.time || 0) / 1000),
classname: (typeof classNameFormatter === 'function' ? classNameFormatter : getClassName)(browser, result)
})
Expand Down
9 changes: 8 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,23 @@
},
"license": "MIT",
"devDependencies": {
"chai": "^3.5.0",
"eslint": "^1.2.1",
"eslint-config-standard": "^4.1.0",
"eslint-plugin-standard": "^1.3.1",
"grunt": "^0.4.1",
"grunt-bump": "^0.5.0",
"grunt-cli": "^0.1.13",
"grunt-conventional-changelog": "^4.1.0",
"grunt-conventional-github-releaser": "^0.4.0",
"grunt-eslint": "^17.1.0",
"grunt-npm": "^0.0.2",
"load-grunt-tasks": "^3.2.0"
"grunt-simple-mocha": "^0.4.1",
"load-grunt-tasks": "^3.2.0",
"mocha": "^2.4.5",
"proxyquire": "^1.7.4",
"sinon": "^1.17.3",
"sinon-chai": "^2.8.0"
},
"contributors": [
"dignifiedquire <[email protected]>",
Expand Down
5 changes: 5 additions & 0 deletions test/.eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"env": {
"jasmine": true
}
}
83 changes: 83 additions & 0 deletions test/reporter.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
'use strict'

var chai = require('chai')
var expect = require('chai').expect
var sinon = require('sinon')
var proxyquire = require('proxyquire')

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

function noop () {}

var fakeLogger = {
create: noop
}

var fakeHelper = {
normalizeWinPath: noop,
mkdirIfNotExists: sinon.stub().yields()
}

var fakeConfig = {
basePath: __dirname,
junitReporter: {
outputFile: ''
}
}

var fakeBaseReporterDecorator = noop

describe('JUnit reporter', function () {
var reporterModule
var reporter

var fakeFs

beforeEach(function () {
fakeFs = {
writeFile: sinon.spy()
}

reporterModule = proxyquire('..', {
fs: fakeFs
})
})

beforeEach(function () {
reporter = new reporterModule['reporter:junit'][1](fakeBaseReporterDecorator, fakeConfig, fakeLogger, fakeHelper)
})

it('should ', 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: [
'Sender',
'using it',
'get request'
],
description: 'should not fail',
log: []
}

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

expect(fakeFs.writeFile).to.have.been.called

var writtenXml = fakeFs.writeFile.firstCall.args[1]
expect(writtenXml).to.have.string('testcase name="Sender using it get request should not fail"')
})
})

0 comments on commit fe69381

Please sign in to comment.