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);
},