From 0184d78d6e44f2567364cce0ddd95bc0adbe9ab9 Mon Sep 17 00:00:00 2001 From: Maciej Jastrzebski Date: Tue, 28 Feb 2023 19:43:03 +0100 Subject: [PATCH 1/3] fix: make container non-enumerable --- src/__tests__/render.test.tsx | 7 +++++++ src/render.tsx | 8 ++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/__tests__/render.test.tsx b/src/__tests__/render.test.tsx index fd2fe4c05..0c5dd6373 100644 --- a/src/__tests__/render.test.tsx +++ b/src/__tests__/render.test.tsx @@ -238,3 +238,10 @@ test('RenderAPI type', () => { render() as RenderAPI; expect(true).toBeTruthy(); }); + +test('returned output can be spread using rest operator', () => { + // Next line should not throw + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { rerender, ...rest } = render(); + expect(rest).toBeTruthy(); +}); diff --git a/src/render.tsx b/src/render.tsx index 1320c85ae..d6037cf48 100644 --- a/src/render.tsx +++ b/src/render.tsx @@ -111,13 +111,17 @@ function buildRenderResult( return getHostChildren(instance)[0]; }, UNSAFE_root: instance, - get container(): ReactTestInstance { + }; + + Object.defineProperty(result, 'container', { + enumerable: false, + get() { throw new Error( "'container' property has been renamed to 'UNSAFE_root'.\n\n" + "Consider using 'root' property which returns root host element." ); }, - }; + }); setRenderResult(result); return result; From 71fc766ea90b552c3e3a34dabd7d6725e5d54d2b Mon Sep 17 00:00:00 2001 From: Maciej Jastrzebski Date: Tue, 28 Feb 2023 19:45:03 +0100 Subject: [PATCH 2/3] chore: fix lint, typecheck --- src/__tests__/render.test.tsx | 4 ++-- src/__tests__/screen.test.tsx | 1 - src/screen.ts | 3 --- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/__tests__/render.test.tsx b/src/__tests__/render.test.tsx index 0c5dd6373..61010e565 100644 --- a/src/__tests__/render.test.tsx +++ b/src/__tests__/render.test.tsx @@ -222,12 +222,12 @@ test('returns composite UNSAFE_root', () => { test('container displays deprecation', () => { const view = render(); - expect(() => view.container).toThrowErrorMatchingInlineSnapshot(` + expect(() => (view as any).container).toThrowErrorMatchingInlineSnapshot(` "'container' property has been renamed to 'UNSAFE_root'. Consider using 'root' property which returns root host element." `); - expect(() => screen.container).toThrowErrorMatchingInlineSnapshot(` + expect(() => (screen as any).container).toThrowErrorMatchingInlineSnapshot(` "'container' property has been renamed to 'UNSAFE_root'. Consider using 'root' property which returns root host element." diff --git a/src/__tests__/screen.test.tsx b/src/__tests__/screen.test.tsx index f13685a51..198214308 100644 --- a/src/__tests__/screen.test.tsx +++ b/src/__tests__/screen.test.tsx @@ -56,7 +56,6 @@ test('screen throws without render', () => { expect(() => screen.UNSAFE_root).toThrow( '`render` method has not been called' ); - expect(() => screen.container).toThrow('`render` method has not been called'); expect(() => screen.debug()).toThrow('`render` method has not been called'); expect(() => screen.debug.shallow()).toThrow( '`render` method has not been called' diff --git a/src/screen.ts b/src/screen.ts index 9de2c5465..6787e1c70 100644 --- a/src/screen.ts +++ b/src/screen.ts @@ -13,9 +13,6 @@ const notImplementedDebug = () => { notImplementedDebug.shallow = notImplemented; const defaultScreen: RenderResult = { - get container(): ReactTestInstance { - throw new Error(SCREEN_ERROR); - }, get root(): ReactTestInstance { throw new Error(SCREEN_ERROR); }, From 6395a23be4aa519b1f33a0a89c134e41d1044969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Jastrze=CC=A8bski?= Date: Wed, 1 Mar 2023 10:48:56 +0100 Subject: [PATCH 3/3] chore: code comment --- src/render.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/render.tsx b/src/render.tsx index d6037cf48..79452fffd 100644 --- a/src/render.tsx +++ b/src/render.tsx @@ -113,6 +113,8 @@ function buildRenderResult( UNSAFE_root: instance, }; + // Add as non-enumerable property, so that it's safe to enumerate + // `render` result, e.g. using destructuring rest syntax. Object.defineProperty(result, 'container', { enumerable: false, get() {