Skip to content

Commit

Permalink
fix: 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 9, 2016
1 parent 8cd1730 commit 8e6e202
Show file tree
Hide file tree
Showing 6 changed files with 122 additions and 9 deletions.
4 changes: 1 addition & 3 deletions .travis.yml
Expand Up @@ -5,12 +5,10 @@ node_js:
- "0.12"
- "0.10"


# Make sure we have new NPM.
before_install:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- npm install -g npm
- npm config set loglevel warn

before_script:
- npm install -g grunt-cli
17 changes: 15 additions & 2 deletions gruntfile.js
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
12 changes: 9 additions & 3 deletions index.js
Expand Up @@ -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')
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
})
Expand Down
10 changes: 9 additions & 1 deletion package.json
Expand Up @@ -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>",
Expand Down
5 changes: 5 additions & 0 deletions test/.eslintrc
@@ -0,0 +1,5 @@
{
"env": {
"mocha": true
}
}
83 changes: 83 additions & 0 deletions test/reporter.spec.js
@@ -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 include parent suite names in generated test names', 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 8e6e202

Please sign in to comment.