123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- 'use strict';
- /**
- * Module dependencies.
- */
- var Base = require('./base');
- /**
- * Expose `JSON`.
- */
- exports = module.exports = JSONReporter;
- /**
- * Initialize a new `JSON` reporter.
- *
- * @api public
- * @param {Runner} runner
- * @param {options} mocha invocation options. Invoking
- * `mocha -R --reporter-options output-file=asdf` yields options like:
- * { ... reporterOptions: { "output-file": "asdf" } ... }
- */
- function JSONReporter (runner, options) {
- <<<<<<< HEAD
- =======
- options = options || {};
- var reptOptions = options.reporterOptions || {};
- >>>>>>> + json ouput controls: output-file, output-object
- 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.once('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;
- <<<<<<< HEAD
- if ('output-object' in options.reporterOptions) {
- // Pass to reporter with: reporter("json", {"output-object": myObject})
- Object.assign(options.reporterOptions['output-object'], obj);
- } else {
- var text = JSON.stringify(obj, null, 2);
- if ('output-file' in options.reporterOptions) {
- // Direct output with `mocha -R --reporter-options output-file=rpt.json`
- try {
- require('fs').writeFileSync(options.reporterOptions['output-file'], text);
- } catch (e) {
- console.warn('error writing to ' + options.reporterOptions.output + ':', e);
- =======
- if ('output-object' in reptOptions) {
- // Pass to reporter with: reporter("json", {"output-object": myObject})
- Object.assign(reptOptions['output-object'], obj);
- } else {
- var text = JSON.stringify(obj, null, 2);
- if ('output-file' in reptOptions) {
- // Direct output with `mocha -R --reporter-options output-file=rpt.json`
- try {
- require('fs').writeFileSync(reptOptions['output-file'], text);
- } catch (e) {
- console.warn('error writing to ' + reptOptions.output + ':', e);
- >>>>>>> + json ouput controls: output-file, output-object
- }
- } else {
- process.stdout.write(text);
- }
- }
- });
- }
- /**
- * 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;
- }
|