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 karma-runner#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 0c6fd02
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 0c6fd02

Please sign in to comment.