Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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.
phillipj committed Mar 7, 2016
1 parent 8cd1730 commit c229a79
Showing 5 changed files with 121 additions and 6 deletions.
17 changes: 15 additions & 2 deletions gruntfile.js
Original file line number Diff line number Diff line change
@@ -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([
12 changes: 9 additions & 3 deletions index.js
Original file line number Diff line number Diff line change
@@ -2,6 +2,12 @@ var os = require('os')
var path = require('path')
var fs = require('fs')
var builder = require('xmlbuilder')
var pathIsAbsolute = require('path-is-absolute')

// 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')
@@ -10,7 +16,7 @@ var JUnitReporter = function (baseReporterDecorator, config, logger, helper, for
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
@@ -52,7 +58,7 @@ var JUnitReporter = function (baseReporterDecorator, config, logger, helper, for
var writeXmlForBrowser = function (browser) {
var safeBrowserName = browser.name.replace(/ /g, '_')
var newOutputFile
if (path.isAbsolute(outputFile)) {
if (pathIsAbsolute(outputFile)) {
newOutputFile = outputFile
} else if (outputFile != null) {
var dir = useBrowserName ? path.join(outputDir, safeBrowserName)
@@ -127,7 +133,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)
})
10 changes: 9 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -20,23 +20,31 @@
],
"author": "Vojta Jina <vojta.jina@gmail.com>",
"dependencies": {
"path-is-absolute": "^1.0.0",
"xmlbuilder": "3.1.0"
},
"peerDependencies": {
"karma": ">=0.9"
},
"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 <dignifiedquire@gmail.com>",
5 changes: 5 additions & 0 deletions test/.eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"env": {
"mocha": 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 c229a79

Please sign in to comment.