diff --git a/src/__tests__/render.test.tsx b/src/__tests__/render.test.tsx index fd2fe4c05..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." @@ -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/__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/render.tsx b/src/render.tsx index 1320c85ae..79452fffd 100644 --- a/src/render.tsx +++ b/src/render.tsx @@ -111,13 +111,19 @@ function buildRenderResult( return getHostChildren(instance)[0]; }, UNSAFE_root: instance, - get container(): ReactTestInstance { + }; + + // 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() { 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; 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); },