From 38ffd382815347bcb5317ce4192ac1e398c2c93a Mon Sep 17 00:00:00 2001 From: Brad Menchl Date: Sat, 23 Mar 2019 11:52:15 -0400 Subject: [PATCH 1/3] Add act to update call to support hooks --- docs/API.md | 2 +- src/__tests__/act.test.js | 8 ++++++++ src/render.js | 11 ++++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/docs/API.md b/docs/API.md index 01c7b7de5..588e857b4 100644 --- a/docs/API.md +++ b/docs/API.md @@ -384,4 +384,4 @@ expect(submitButtons).toHaveLength(3); // expect 3 elements ## `act` -Useful function to help testing components that use hooks API. By default any `render` and `fireEvent` calls are wrapped by this function, so there is no need to wrap it manually. This method is re-exported from [`react-test-renderer`](https://github.com/facebook/react/blob/master/packages/react-test-renderer/src/ReactTestRenderer.js#L567]). +Useful function to help testing components that use hooks API. By default any `render`, `update`, and `fireEvent` calls are wrapped by this function, so there is no need to wrap it manually. This method is re-exported from [`react-test-renderer`](https://github.com/facebook/react/blob/master/packages/react-test-renderer/src/ReactTestRenderer.js#L567]). diff --git a/src/__tests__/act.test.js b/src/__tests__/act.test.js index db29ea4f3..137bb002c 100644 --- a/src/__tests__/act.test.js +++ b/src/__tests__/act.test.js @@ -28,6 +28,14 @@ test('render should trigger useEffect', () => { expect(effectCallback).toHaveBeenCalledTimes(1); }); +test('updaate should trigger useEffect', () => { + const effectCallback = jest.fn(); + const { update } = render(); + update(); + + expect(effectCallback).toHaveBeenCalledTimes(2); +}); + test('fireEvent should trigger useState', () => { const { getByTestId } = render(); const counter = getByTestId('counter'); diff --git a/src/render.js b/src/render.js index 147175427..c53375f10 100644 --- a/src/render.js +++ b/src/render.js @@ -26,7 +26,7 @@ export default function render( return { ...getByAPI(instance), ...queryByAPI(instance), - update: renderer.update, + update: updateWithAct(renderer), unmount: renderer.unmount, toJSON: renderer.toJSON, debug: debug(instance, renderer), @@ -46,6 +46,15 @@ function renderWithAct( return ((renderer: any): ReactTestRenderer); } +function updateWithAct(renderer: ReactTestRenderer) { + function updateImpl(component: React.Element) { + act(() => { + renderer.update(component); + }); + } + return updateImpl; +} + function debug(instance: ReactTestInstance, renderer) { function debugImpl(message?: string) { return debugDeep(renderer.toJSON(), message); From 95492362e5864be5f7d8eed06a351bb8614c7b84 Mon Sep 17 00:00:00 2001 From: Brad Menchl Date: Sun, 24 Mar 2019 01:34:03 -0400 Subject: [PATCH 2/3] Spelling fix --- src/__tests__/act.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/__tests__/act.test.js b/src/__tests__/act.test.js index 137bb002c..67f22ab74 100644 --- a/src/__tests__/act.test.js +++ b/src/__tests__/act.test.js @@ -28,7 +28,7 @@ test('render should trigger useEffect', () => { expect(effectCallback).toHaveBeenCalledTimes(1); }); -test('updaate should trigger useEffect', () => { +test('update should trigger useEffect', () => { const effectCallback = jest.fn(); const { update } = render(); update(); From a2acfbff71d7878f7f44c5c48a2833f00121c2ae Mon Sep 17 00:00:00 2001 From: Brad Menchl Date: Sun, 24 Mar 2019 01:34:19 -0400 Subject: [PATCH 3/3] Return internal function --- src/render.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/render.js b/src/render.js index c53375f10..b68690fca 100644 --- a/src/render.js +++ b/src/render.js @@ -47,12 +47,11 @@ function renderWithAct( } function updateWithAct(renderer: ReactTestRenderer) { - function updateImpl(component: React.Element) { + return function(component: React.Element) { act(() => { renderer.update(component); }); - } - return updateImpl; + }; } function debug(instance: ReactTestInstance, renderer) {