123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /**
- * Module dependencies.
- */
- 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;
- }
|