From 78fb456b8a113e1bdd654208908ccc61f70c39b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Klekowski?= Date: Wed, 21 Oct 2020 12:26:01 +0200 Subject: [PATCH] feat: export `container` from render (#567) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: export root test instance from render * test: add tests for root test instance returned from render function * docs: add description about root test instance returned from render function * feat: change root export to container and wrap component in View if no wrapper defined * docs: update description about container test instance returned from render function * test: update tests for root test instance returned from render function * test: clean up comments in tests * feat: add react-native as peerDependency, clean up lint ignore for lines that was importing react-native * revert adding default wrapper * rework tests * reword docs * add testID checks * add comments Co-authored-by: Michał Pierzchała --- package.json | 1 + src/__tests__/render.test.js | 26 ++++++++++++++++++++++++++ src/fireEvent.js | 1 - src/helpers/getByAPI.js | 3 --- src/render.js | 1 + website/docs/API.md | 8 ++++++++ 6 files changed, 36 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 4668ca10..00566f77 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ }, "peerDependencies": { "react": ">=16.0.0", + "react-native": ">=0.59", "react-test-renderer": ">=16.0.0" }, "scripts": { diff --git a/src/__tests__/render.test.js b/src/__tests__/render.test.js index ebf84696..a1d8d0c0 100644 --- a/src/__tests__/render.test.js +++ b/src/__tests__/render.test.js @@ -382,3 +382,29 @@ test('renders options.wrapper around updated node', () => { `); }); + +test('returns container', () => { + const { container } = render(); + + expect(container).toBeDefined(); + // `View` composite component is returned. This behavior will break if we + // start returning only host components. + expect(container.type).toBe(View); + expect(container.props.testID).toBe('inner'); +}); + +test('returns wrapped component as container', () => { + const WrapperComponent = ({ children }) => ( + {children} + ); + + const { container } = render(, { + wrapper: WrapperComponent, + }); + + expect(container).toBeDefined(); + // `WrapperComponent` composite component is returned with no testID passed to + // it. This behavior will break if we start returning only host components. + expect(container.type).toBe(WrapperComponent); + expect(container.props.testID).not.toBeDefined(); +}); diff --git a/src/fireEvent.js b/src/fireEvent.js index c9156dd1..f3846c71 100644 --- a/src/fireEvent.js +++ b/src/fireEvent.js @@ -7,7 +7,6 @@ const isHostElement = (element?: ReactTestInstance) => { }; const isTextInput = (element?: ReactTestInstance) => { - // eslint-disable-next-line import/no-extraneous-dependencies const { TextInput } = require('react-native'); return element?.type === TextInput; }; diff --git a/src/helpers/getByAPI.js b/src/helpers/getByAPI.js index 6f860ac8..33c88d50 100644 --- a/src/helpers/getByAPI.js +++ b/src/helpers/getByAPI.js @@ -13,7 +13,6 @@ const filterNodeByType = (node, type) => node.type === type; const getNodeByText = (node, text) => { try { - // eslint-disable-next-line const { Text } = require('react-native'); const isTextComponent = filterNodeByType(node, Text); if (isTextComponent) { @@ -61,7 +60,6 @@ const getChildrenAsText = (children, TextComponent, textContent = []) => { const getTextInputNodeByPlaceholderText = (node, placeholder) => { try { - // eslint-disable-next-line const { TextInput } = require('react-native'); return ( filterNodeByType(node, TextInput) && @@ -76,7 +74,6 @@ const getTextInputNodeByPlaceholderText = (node, placeholder) => { const getTextInputNodeByDisplayValue = (node, value) => { try { - // eslint-disable-next-line const { TextInput } = require('react-native'); return ( filterNodeByType(node, TextInput) && diff --git a/src/render.js b/src/render.js index 3adfcc8d..03e745dc 100644 --- a/src/render.js +++ b/src/render.js @@ -44,6 +44,7 @@ export default function render( ...findByAPI(instance), ...a11yAPI(instance), update, + container: instance, rerender: update, // alias for `update` unmount: renderer.unmount, toJSON: renderer.toJSON, diff --git a/website/docs/API.md b/website/docs/API.md index 0a323762..abdef603 100644 --- a/website/docs/API.md +++ b/website/docs/API.md @@ -118,6 +118,14 @@ toJSON(): ReactTestRendererJSON | null Get the rendered component JSON representation, e.g. for snapshot testing. +### `container` + +```ts +container: ReactTestInstance; +``` + +A reference to the rendered root element. + ## `cleanup` ```ts