lifen-autotest/node_modules/stack-chain/test/simple/conflict-format-delayed-circular.js

87 lines
2.1 KiB
JavaScript

var test = require("tap").test;
var defaultFormater = require('../../format.js');
var produce = require('../produce.js');
var chain = require('../../');
test("set Error.prepareStackTrace uses stack-chain formater", function (t) {
// Save original formatter
var restore = Error.prepareStackTrace;
// Overwrite formatter
Error.prepareStackTrace = function (error, frames) {
if (error.test) {
Object.defineProperty(error, '__some_secret', {
value: 'you can\'t compare pain.'
});
}
// Maintain .stack format
return restore(error, frames);
};
// Prope the error using custom prepareStackTrace
var testError = new Error();
testError.test = true;
testError.stack;
t.equal(testError.__some_secret, 'you can\'t compare pain.');
// Restore
Error.prepareStackTrace = restore;
t.equal(produce.real(3), produce.fake([
'Error: trace',
' at {where}:18:17',
' at deepStack ({where}:5:5)',
' at deepStack ({where}:7:5)'
]));
t.end();
});
test("set Error.prepareStackTrace uses other formater", function (t) {
// Another module sets up a formater
Error.prepareStackTrace = function () {
return 'custom';
};
// Save original formatter
var restore = Error.prepareStackTrace;
// Overwrite formatter
Error.prepareStackTrace = function (error, frames) {
if (error.test) {
Object.defineProperty(error, '__some_secret', {
value: 'you can\'t compare pain.'
});
}
// Maintain .stack format
return restore(error, frames);
};
// Prope the error using custom prepareStackTrace
var testError = new Error();
testError.test = true;
testError.stack;
t.equal(testError.__some_secret, 'you can\'t compare pain.');
// Restore
Error.prepareStackTrace = restore;
t.equal(produce.real(3), 'custom');
// Perform an actual restore of the formater, to prevent test conflicts
chain.format.restore();
t.equal(produce.real(3), produce.fake([
'Error: trace',
' at {where}:18:17',
' at deepStack ({where}:5:5)',
' at deepStack ({where}:7:5)'
]));
t.end();
});