From 157b4d332e2897519ffeff3810e4cd8330580544 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 1 Apr 2024 14:12:55 +0900 Subject: [PATCH 1/2] fix(utils): fix diff objects with getter only fields --- packages/utils/src/helpers.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/utils/src/helpers.ts b/packages/utils/src/helpers.ts index 5a3b454a8d8b..40effb2a3836 100644 --- a/packages/utils/src/helpers.ts +++ b/packages/utils/src/helpers.ts @@ -111,7 +111,15 @@ export function clone( if (!descriptor) continue const cloned = clone((val as any)[k], seen, options) - if ('get' in descriptor) { + if (options.forceWritable) { + Object.defineProperty(out, k, { + enumerable: descriptor.enumerable, + configurable: true, + writable: true, + value: cloned, + }) + } + else if ('get' in descriptor) { Object.defineProperty(out, k, { ...descriptor, get() { @@ -122,7 +130,6 @@ export function clone( else { Object.defineProperty(out, k, { ...descriptor, - writable: options.forceWritable ? true : descriptor.writable, value: cloned, }) } From e4e4fa8e68667b0301d9db29639e0a38026a619d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 1 Apr 2024 14:22:38 +0900 Subject: [PATCH 2/2] test: add test --- test/core/test/diff.test.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/test/core/test/diff.test.ts b/test/core/test/diff.test.ts index 18c3f2ec9a98..b68e9dd9a0c4 100644 --- a/test/core/test/diff.test.ts +++ b/test/core/test/diff.test.ts @@ -115,6 +115,34 @@ test('asymmetric matcher in nested', () => { `) }) +test('getter only property', () => { + setupColors(getDefaultColors()) + const x = { normalProp: 1 } + const y = { normalProp: 2 } + Object.defineProperty(x, 'getOnlyProp', { + enumerable: true, + get: () => ({ a: 'b' }), + }) + Object.defineProperty(y, 'getOnlyProp', { + enumerable: true, + get: () => ({ a: 'b' }), + }) + expect( + getErrorDiff(x, y), + ).toMatchInlineSnapshot(` + "- Expected + + Received + + Object { + "getOnlyProp": Object { + "a": "b", + }, + - "normalProp": 2, + + "normalProp": 1, + }" + `) +}) + function getErrorDiff(actual: unknown, expected: unknown) { try { expect(actual).toEqual(expected)