UNPKG

kocha

Version:

Modern, simpler Mocha clone, no globals, lint friendly

87 lines (73 loc) 1.54 kB
var Base = require('./base') /** * Expose `JSON`. */ exports = module.exports = JSONReporter /** * Initialize a new `JSON` reporter. * * @api public * @param {Runner} runner */ function JSONReporter (runner) { Base.call(this, runner) var self = this var tests = [] var pending = [] var failures = [] var passes = [] runner.on('test end', function (test) { tests.push(test) }) runner.on('pass', function (test) { passes.push(test) }) runner.on('fail', function (test) { failures.push(test) }) runner.on('pending', function (test) { pending.push(test) }) runner.on('end', function () { var obj = { stats: self.stats, tests: tests.map(clean), pending: pending.map(clean), failures: failures.map(clean), passes: passes.map(clean) } runner.testResults = obj process.stdout.write(JSON.stringify(obj, null, 2)) }) } /** * Return a plain-object representation of `test` * free of cyclic properties etc. * * @api private * @param {Object} test * @return {Object} */ function clean (test) { return { title: test.title, fullTitle: test.fullTitle(), duration: test.duration, currentRetry: test.currentRetry(), err: errorJSON(test.err || {}) } } /** * Transform `error` into a JSON object. * * @api private * @param {Error} err * @return {Object} */ function errorJSON (err) { var res = {} Object.getOwnPropertyNames(err).forEach(function (key) { res[key] = err[key] }, err) return res }