mocha-annotated
Version:
Mocha but with tasks and feedback built into it!
73 lines (65 loc) • 1.83 kB
JavaScript
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/**
* Replaces any circular references inside `obj` with '[object Object]'
*
* @private
* @param {Object} obj
* @return {Object}
*/
function cleanCycles(obj) {
var cache = [];
var str = JSON.stringify(obj, function (key, value) {
if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value !== null) {
if (cache.indexOf(value) !== -1) {
// Instead of going in a circle, we'll set it to null
return null;
}
cache.push(value);
}
return value;
});
return JSON.parse(str);
}
exports.cleanCycles = cleanCycles;
/**
* Transform an Error object into a JSON object.
*
* @private
* @param {Error} err
* @return {Object}
*/
function errorJSON(err) {
var res = {};
Object.getOwnPropertyNames(err).forEach(function (key) {
res[key] = err[key];
}, err);
return res;
}
exports.errorJSON = errorJSON;
/**
* Return a plain-object representation of `test`
* free of cyclic properties etc.
*
* @api private
* @param {AnnotatedTest|Test} test
* @return {Object}
*/
function clean(test) {
var result = {
title: test.title,
task: test.task,
feedback: test.feedback,
fullTitle: test.fullTitle(),
duration: test.duration,
currentRetry: test.currentRetry()
};
if (test.err != null) {
result.err = cleanCycles(test.err instanceof Error ? errorJSON(test.err) : test.err);
if (test.annotated && result.feedback == null) {
result.feedback = result.err.message;
}
}
return result;
}
exports.clean = clean;
;