From 4efa985e09ee298c30ca754423cf377e5ba0e6b2 Mon Sep 17 00:00:00 2001 From: Sophie Au Date: Thu, 26 Sep 2019 17:47:40 +0200 Subject: [PATCH 1/5] Update React and React Native dependencies --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index fad055a..2b7d85e 100644 --- a/package.json +++ b/package.json @@ -57,15 +57,15 @@ "metro-react-native-babel-preset": "^0.52.0", "prettier": "^1.16.4", "pretty-quick": "^1.10.0", - "react": "16.8.6", + "react": "16.9.0", "react-hooks-testing-library": "^0.5.0", "react-intl": "^2.8.0", "react-intl-native": "^2.1.2", - "react-native": "^0.60.4", + "react-native": "^0.61.1", "react-native-gesture-handler": "^1.1.0", "react-navigation": "^3.5.1", "react-redux": "^7.0.3", - "react-test-renderer": "16.8.6", + "react-test-renderer": "16.9.0", "redux": "^4.0.1", "semantic-release": "^15.13.3", "snapshot-diff": "0.5.1" From e080c0657c661289612a13de93069880f7adc18d Mon Sep 17 00:00:00 2001 From: Sophie Au Date: Thu, 26 Sep 2019 18:11:49 +0200 Subject: [PATCH 2/5] Expose async render and fireEvent functions --- src/index.js | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 32f1a04..0a9fdf1 100644 --- a/src/index.js +++ b/src/index.js @@ -53,6 +53,45 @@ function render(ui, { options = {}, wrapper: WrapperComponent, queries } = {}) { }; } +async function asyncRender(ui, { options = {}, wrapper: WrapperComponent, queries } = {}) { + const wrapUiIfNeeded = innerElement => + WrapperComponent ? ( + + {innerElement} + + ) : ( + {innerElement} + ); + + let testRenderer; + + await act(async () => { + testRenderer = TR.create(wrapUiIfNeeded(ui), options); + }); + + renderers.add(testRenderer); + + const wrappers = proxyElement(testRenderer.root).findAll(n => n.type === 'View'); + const baseElement = wrappers[0]; // Includes YellowBox and your render + const container = wrappers[1]; // Includes only your render + + return { + baseElement, + container, + debug: (el = baseElement) => console.log(prettyPrint(el)), + unmount: () => testRenderer.unmount(), + rerender: async rerenderUi => { + await act(async () => { + testRenderer.update(wrapUiIfNeeded(rerenderUi)); + }); + }, + asJSON: () => { + return toJSON(container); + }, + ...getQueriesForElement(baseElement, queries), + }; +} + function cleanup() { renderers.forEach(cleanupRenderer); } @@ -70,6 +109,14 @@ function fireEvent(...args) { return returnValue; } +async function asyncFireEvent(...args) { + let returnValue; + await act(async () => { + returnValue = rntlFireEvent(...args); + }); + return returnValue; +} + Object.keys(rntlFireEvent).forEach(typeArg => { fireEvent[typeArg] = (...args) => { let returnValue; @@ -80,5 +127,25 @@ Object.keys(rntlFireEvent).forEach(typeArg => { }; }); +Object.keys(rntlFireEvent).forEach(typeArg => { + fireEvent[typeArg] = (...args) => { + let returnValue; + act(() => { + returnValue = rntlFireEvent[typeArg](...args); + }); + return returnValue; + }; +}); + +Object.keys(rntlFireEvent).forEach(async typeArg => { + asyncFireEvent[typeArg] = async (...args) => { + let returnValue; + await act(async () => { + returnValue = rntlFireEvent[typeArg](...args); + }); + return returnValue; + }; +}); + export * from './lib'; -export { act, cleanup, fireEvent, render, NativeTestEvent }; +export { act, cleanup, fireEvent, asyncFireEvent, render, asyncRender, NativeTestEvent }; From 742be60d57d60b1cf21ceeaed60ba45fc53e2c86 Mon Sep 17 00:00:00 2001 From: Sophie Au Date: Thu, 26 Sep 2019 18:21:10 +0200 Subject: [PATCH 3/5] Add typings --- typings/events.d.ts | 3 ++- typings/index.d.ts | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/typings/events.d.ts b/typings/events.d.ts index d23cb9a..a65b20c 100644 --- a/typings/events.d.ts +++ b/typings/events.d.ts @@ -32,8 +32,9 @@ export declare class NativeTestEvent { export type FireFunction = (element: NativeTestInstance, event: NativeTestEvent) => boolean; export type FireObject = { - [K in EventType]: (element: NativeTestInstance, options?: {}) => boolean + [K in EventType]: (element: NativeTestInstance, options?: {}) => boolean; }; export const getEventHandlerName: (key: string) => string; export const fireEvent: FireFunction & FireObject; +export const asyncFireEvent: Promise; diff --git a/typings/index.d.ts b/typings/index.d.ts index 7525a80..223c6e6 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -47,9 +47,19 @@ export function render( options: RenderOptions, ): RenderResult; +export function asyncRender( + ui: ReactElement, + options?: Omit, +): Promise; +export function asyncRender( + ui: ReactElement, + options: RenderOptions, +): Promise>; + export const cleanup: () => void; export const act: (callback: () => void) => void; +export function act(callback: () => Promise): Promise; export { queries, queryHelpers, within }; export * from './to-json'; From e299af5f5ab9ddb23bb8e0f4957d7b6838d9d3ce Mon Sep 17 00:00:00 2001 From: Sophie Au Date: Mon, 30 Sep 2019 11:00:49 +0200 Subject: [PATCH 4/5] Revert "Add typings" This reverts commit 742be60d57d60b1cf21ceeaed60ba45fc53e2c86. --- typings/events.d.ts | 3 +-- typings/index.d.ts | 10 ---------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/typings/events.d.ts b/typings/events.d.ts index a65b20c..d23cb9a 100644 --- a/typings/events.d.ts +++ b/typings/events.d.ts @@ -32,9 +32,8 @@ export declare class NativeTestEvent { export type FireFunction = (element: NativeTestInstance, event: NativeTestEvent) => boolean; export type FireObject = { - [K in EventType]: (element: NativeTestInstance, options?: {}) => boolean; + [K in EventType]: (element: NativeTestInstance, options?: {}) => boolean }; export const getEventHandlerName: (key: string) => string; export const fireEvent: FireFunction & FireObject; -export const asyncFireEvent: Promise; diff --git a/typings/index.d.ts b/typings/index.d.ts index 223c6e6..7525a80 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -47,19 +47,9 @@ export function render( options: RenderOptions, ): RenderResult; -export function asyncRender( - ui: ReactElement, - options?: Omit, -): Promise; -export function asyncRender( - ui: ReactElement, - options: RenderOptions, -): Promise>; - export const cleanup: () => void; export const act: (callback: () => void) => void; -export function act(callback: () => Promise): Promise; export { queries, queryHelpers, within }; export * from './to-json'; From 64c585a7356a66164f9f33a1a6632c2294203a51 Mon Sep 17 00:00:00 2001 From: Sophie Au Date: Mon, 30 Sep 2019 11:00:51 +0200 Subject: [PATCH 5/5] Revert "Expose async render and fireEvent functions" This reverts commit e080c0657c661289612a13de93069880f7adc18d. --- src/index.js | 69 +--------------------------------------------------- 1 file changed, 1 insertion(+), 68 deletions(-) diff --git a/src/index.js b/src/index.js index 0a9fdf1..32f1a04 100644 --- a/src/index.js +++ b/src/index.js @@ -53,45 +53,6 @@ function render(ui, { options = {}, wrapper: WrapperComponent, queries } = {}) { }; } -async function asyncRender(ui, { options = {}, wrapper: WrapperComponent, queries } = {}) { - const wrapUiIfNeeded = innerElement => - WrapperComponent ? ( - - {innerElement} - - ) : ( - {innerElement} - ); - - let testRenderer; - - await act(async () => { - testRenderer = TR.create(wrapUiIfNeeded(ui), options); - }); - - renderers.add(testRenderer); - - const wrappers = proxyElement(testRenderer.root).findAll(n => n.type === 'View'); - const baseElement = wrappers[0]; // Includes YellowBox and your render - const container = wrappers[1]; // Includes only your render - - return { - baseElement, - container, - debug: (el = baseElement) => console.log(prettyPrint(el)), - unmount: () => testRenderer.unmount(), - rerender: async rerenderUi => { - await act(async () => { - testRenderer.update(wrapUiIfNeeded(rerenderUi)); - }); - }, - asJSON: () => { - return toJSON(container); - }, - ...getQueriesForElement(baseElement, queries), - }; -} - function cleanup() { renderers.forEach(cleanupRenderer); } @@ -109,14 +70,6 @@ function fireEvent(...args) { return returnValue; } -async function asyncFireEvent(...args) { - let returnValue; - await act(async () => { - returnValue = rntlFireEvent(...args); - }); - return returnValue; -} - Object.keys(rntlFireEvent).forEach(typeArg => { fireEvent[typeArg] = (...args) => { let returnValue; @@ -127,25 +80,5 @@ Object.keys(rntlFireEvent).forEach(typeArg => { }; }); -Object.keys(rntlFireEvent).forEach(typeArg => { - fireEvent[typeArg] = (...args) => { - let returnValue; - act(() => { - returnValue = rntlFireEvent[typeArg](...args); - }); - return returnValue; - }; -}); - -Object.keys(rntlFireEvent).forEach(async typeArg => { - asyncFireEvent[typeArg] = async (...args) => { - let returnValue; - await act(async () => { - returnValue = rntlFireEvent[typeArg](...args); - }); - return returnValue; - }; -}); - export * from './lib'; -export { act, cleanup, fireEvent, asyncFireEvent, render, asyncRender, NativeTestEvent }; +export { act, cleanup, fireEvent, render, NativeTestEvent };