From 8dc5203e11781314cb2b9f271e9d022aab5da266 Mon Sep 17 00:00:00 2001 From: Maciej Jastrzebski Date: Fri, 26 Apr 2024 17:14:42 +0200 Subject: [PATCH 1/4] fix: use proper act # Conflicts: # src/render-act.ts --- src/helpers/wrap-async.ts | 3 +-- src/render-act.ts | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/helpers/wrap-async.ts b/src/helpers/wrap-async.ts index 8efea896d..c22a1df5e 100644 --- a/src/helpers/wrap-async.ts +++ b/src/helpers/wrap-async.ts @@ -1,7 +1,6 @@ /* istanbul ignore file */ -import { act } from 'react-test-renderer'; -import { getIsReactActEnvironment, setReactActEnvironment } from '../act'; +import act, { getIsReactActEnvironment, setReactActEnvironment } from '../act'; import { flushMicroTasksLegacy } from '../flush-micro-tasks'; import { checkReactVersionAtLeast } from '../react-versions'; diff --git a/src/render-act.ts b/src/render-act.ts index 2b20fd654..50980562f 100644 --- a/src/render-act.ts +++ b/src/render-act.ts @@ -1,5 +1,6 @@ import TestRenderer from 'react-test-renderer'; import type { ReactTestRenderer, TestRendererOptions } from 'react-test-renderer'; +import act from './act'; export function renderWithAct( component: React.ReactElement, @@ -8,7 +9,7 @@ export function renderWithAct( let renderer: ReactTestRenderer; // This will be called synchronously. - void TestRenderer.act(() => { + void act(() => { renderer = TestRenderer.create(component, options); }); From 70aeffc4045899557ee3bb0803b72e3ab3b6dbcb Mon Sep 17 00:00:00 2001 From: Maciej Jastrzebski Date: Fri, 26 Apr 2024 17:17:48 +0200 Subject: [PATCH 2/4] fix: user event missing act on min press duration --- src/user-event/press/press.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/user-event/press/press.ts b/src/user-event/press/press.ts index e5faa1210..fe63a5ee5 100644 --- a/src/user-event/press/press.ts +++ b/src/user-event/press/press.ts @@ -1,4 +1,5 @@ import { ReactTestInstance } from 'react-test-renderer'; +import act from '../../act'; import { getHostParent } from '../../helpers/component-tree'; import { isTextInputEditable } from '../../helpers/text-input'; import { isPointerEventEnabled } from '../../helpers/pointer-events'; @@ -82,7 +83,9 @@ const emitPressablePressEvents = async ( // before emitting the `pressOut` event. We need to wait here, so that // `press()` function does not return before that. if (DEFAULT_MIN_PRESS_DURATION - options.duration > 0) { - await wait(config, DEFAULT_MIN_PRESS_DURATION - options.duration); + await act(async () => { + await wait(config, DEFAULT_MIN_PRESS_DURATION - options.duration); + }); } }; From da47edf26e808858734140847d371a8bdb22f756 Mon Sep 17 00:00:00 2001 From: Maciej Jastrzebski Date: Fri, 26 Apr 2024 17:23:35 +0200 Subject: [PATCH 3/4] chore: add button test --- src/user-event/press/__tests__/press.test.tsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/user-event/press/__tests__/press.test.tsx b/src/user-event/press/__tests__/press.test.tsx index 931ddcb77..0abac8904 100644 --- a/src/user-event/press/__tests__/press.test.tsx +++ b/src/user-event/press/__tests__/press.test.tsx @@ -6,6 +6,7 @@ import { TouchableHighlight, TouchableOpacity, View, + Button, } from 'react-native'; import { createEventLogger, getEventsName } from '../../../test-utils'; import { render, screen } from '../../..'; @@ -201,6 +202,15 @@ describe('userEvent.press with fake timers', () => { expect(getEventsName(events)).toEqual(['pressIn', 'press', 'pressOut']); }); + test('press works on Button', async () => { + const { events, logEvent } = createEventLogger(); + + render(