Skip to content

Commit

Permalink
Also handle nested non-writable getters
Browse files Browse the repository at this point in the history
  • Loading branch information
JoshuaKGoldberg committed Oct 8, 2024
1 parent a2d919a commit 853dc9a
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 1 deletion.
4 changes: 3 additions & 1 deletion lib/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -675,7 +675,9 @@ exports.breakCircularDeps = inputObj => {

seen.add(obj);
for (const k in obj) {
if (Object.prototype.hasOwnProperty.call(obj, k)) {
const descriptor = Object.getOwnPropertyDescriptor(obj, k);

if (descriptor && descriptor.writable) {
obj[k] = _breakCircularDeps(obj[k], k);
}
}
Expand Down
15 changes: 15 additions & 0 deletions test/integration/fixtures/parallel/getter-error-object.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import {describe, it} from '../../../../index.js';

describe('test1', () => {
it('test', async () => {
const error = new Error('Oh no!');

error.nested = {
get inner() {
return 'abc';
}
};

throw error;
});
});
12 changes: 12 additions & 0 deletions test/integration/parallel.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,16 @@ describe('parallel run', () => {
assert.strictEqual(result.failures[0].err.message, 'Oh no!');
assert.deepStrictEqual(result.failures[0].err.values, [ { toB: { toA: '[Circular]' } } ]);
});

it('should correctly handle a non-writable getter reference in an exception', async () => {
const result = await runMochaJSONAsync('parallel/getter-error-object.mjs', [
'--parallel',
'--jobs',
'2',
require.resolve('./fixtures/parallel/testworkerid1.mjs')
]);
assert.strictEqual(result.stats.failures, 1);
assert.strictEqual(result.stats.passes, 1);
assert.strictEqual(result.failures[0].err.message, 'Oh no!');
});
});

0 comments on commit 853dc9a

Please sign in to comment.