@samitouri / QOS-React / commits / 53b12e46a1

Add stable React.act export (#28160)

Starting in version 19, users can import the `act` testing API from the `react` package instead of using a renderer specific API, like `react-dom/test-utils`.

Andrew Clark committed Feb 1, 2024 at 13:28 UTC 53b12e46a17549ec7644e13c126440ed2f3629fd
18 files changed +26 -20
fixtures/dom/src/__tests__/nested-act-test.js
+2 -2
@@ -20,7 +20,7 @@ describe('unmocked scheduler', () => {
20 beforeEach(() => {
21 jest.resetModules();
22 React = require('react');
23 - DOMAct = React.unstable_act;
23 + DOMAct = React.act;
24 TestRenderer = require('react-test-renderer');
25 TestAct = TestRenderer.act;
26 });
@@ -61,7 +61,7 @@ describe('mocked scheduler', () => {
61 require.requireActual('scheduler/unstable_mock')
62 );
63 React = require('react');
64 - DOMAct = React.unstable_act;
64 + DOMAct = React.act;
65 TestRenderer = require('react-test-renderer');
66 TestAct = TestRenderer.act;
67 });
packages/react-devtools-shared/src/__tests__/storeComponentFilters-test.js
+3 -1
@@ -19,7 +19,9 @@ describe('Store component filters', () => {
19 let utils;
20
21 const act = async (callback: Function) => {
22 - if (React.unstable_act != null) {
22 + if (React.act != null) {
23 + await React.act(callback);
24 + } else if (React.unstable_act != null) {
25 await React.unstable_act(callback);
26 } else {
27 callback();
packages/react-devtools-shared/src/__tests__/utils.js
+3 -1
@@ -21,7 +21,9 @@ export function act(
21 const {act: actTestRenderer} = require('react-test-renderer');
22 // Use `require('react-dom/test-utils').act` as a fallback for React 17, which can be used in integration tests for React DevTools.
23 const actDOM =
24 - require('react').unstable_act || require('react-dom/test-utils').act;
24 + require('react').act ||
25 + require('react').unstable_act ||
26 + require('react-dom/test-utils').act;
27
28 actDOM(() => {
29 actTestRenderer(() => {
packages/react-dom/src/__tests__/ReactDOMHydrationDiff-test.js
+1 -1
@@ -25,7 +25,7 @@ describe('ReactDOMServerHydration', () => {
25 React = require('react');
26 ReactDOMClient = require('react-dom/client');
27 ReactDOMServer = require('react-dom/server');
28 - act = React.unstable_act;
28 + act = React.act;
29
30 console.error = jest.fn();
31 container = document.createElement('div');
packages/react-dom/src/__tests__/ReactTestUtilsActUnmockedScheduler-test.js
+1 -1
@@ -32,7 +32,7 @@ beforeEach(() => {
32 yields = [];
33 React = require('react');
34 ReactDOMClient = require('react-dom/client');
35 - act = React.unstable_act;
35 + act = React.act;
36 container = document.createElement('div');
37 document.body.appendChild(container);
38 });
packages/react-dom/src/test-utils/ReactTestUtils.js
+3 -1
@@ -39,7 +39,9 @@ const getFiberCurrentPropsFromNode = EventInternals[2];
39 const enqueueStateRestore = EventInternals[3];
40 const restoreStateIfNeeded = EventInternals[4];
41
42 -const act = React.unstable_act;
42 +// TODO: Add a warning if this API is accessed with advice to switch to
43 +// importing directly from the React package instead.
44 +const act = React.act;
45
46 function Event(suffix) {}
47
packages/react-reconciler/src/__tests__/ReactActWarnings-test.js
+1 -1
@@ -28,7 +28,7 @@ describe('act warnings', () => {
28 React = require('react');
29 Scheduler = require('scheduler');
30 ReactNoop = require('react-noop-renderer');
31 - act = React.unstable_act;
31 + act = React.act;
32 useState = React.useState;
33 Suspense = React.Suspense;
34 startTransition = React.startTransition;
packages/react-reconciler/src/__tests__/ReactFiberHostContext-test.internal.js
+1 -1
@@ -20,7 +20,7 @@ describe('ReactFiberHostContext', () => {
20 beforeEach(() => {
21 jest.resetModules();
22 React = require('react');
23 - act = React.unstable_act;
23 + act = React.act;
24 ReactFiberReconciler = require('react-reconciler');
25 ConcurrentRoot =
26 require('react-reconciler/src/ReactRootTags').ConcurrentRoot;
packages/react-reconciler/src/__tests__/ReactIsomorphicAct-test.js
+1 -1
@@ -28,7 +28,7 @@ describe('isomorphic act()', () => {
28 ReactNoop = require('react-noop-renderer');
29 DiscreteEventPriority =
30 require('react-reconciler/constants').DiscreteEventPriority;
31 - act = React.unstable_act;
31 + act = React.act;
32 use = React.use;
33 Suspense = React.Suspense;
34 startTransition = React.startTransition;
packages/react-reconciler/src/__tests__/ReactSchedulerIntegration-test.js
+1 -1
@@ -370,7 +370,7 @@ describe('`act` bypasses Scheduler methods completely,', () => {
370 }
371
372 const root = ReactNoop.createRoot();
373 - const publicAct = React.unstable_act;
373 + const publicAct = React.act;
374 const prevIsReactActEnvironment = global.IS_REACT_ACT_ENVIRONMENT;
375 try {
376 global.IS_REACT_ACT_ENVIRONMENT = true;
packages/react-refresh/src/__tests__/ReactFresh-test.js
+2 -2
@@ -34,7 +34,7 @@ describe('ReactFresh', () => {
34 ReactDOM = require('react-dom');
35 ReactDOMClient = require('react-dom/client');
36 Scheduler = require('scheduler');
37 - act = React.unstable_act;
37 + act = React.act;
38 internalAct = require('internal-test-utils').act;
39
40 const InternalTestUtils = require('internal-test-utils');
@@ -3792,7 +3792,7 @@ describe('ReactFresh', () => {
3792 React = require('react');
3793 ReactDOM = require('react-dom');
3794 Scheduler = require('scheduler');
3795 - act = React.unstable_act;
3795 + act = React.act;
3796 internalAct = require('internal-test-utils').act;
3797
3798 // Important! Inject into the global hook *after* ReactDOM runs:
packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMForm-test.js
+1 -1
@@ -54,7 +54,7 @@ describe('ReactFlightDOMForm', () => {
54 ReactServerDOMClient = require('react-server-dom-webpack/client.edge');
55 ReactDOMServer = require('react-dom/server.edge');
56 ReactDOMClient = require('react-dom/client');
57 - act = React.unstable_act;
57 + act = React.act;
58 useFormState = require('react-dom').useFormState;
59 container = document.createElement('div');
60 document.body.appendChild(container);
packages/react-test-renderer/src/ReactTestRenderer.js
+1 -1
@@ -54,7 +54,7 @@ import {getPublicInstance} from './ReactFiberConfigTestHost';
54 import {ConcurrentRoot, LegacyRoot} from 'react-reconciler/src/ReactRootTags';
55 import {allowConcurrentByDefault} from 'shared/ReactFeatureFlags';
56
57 -const act = React.unstable_act;
57 +const act = React.act;
58
59 // TODO: Remove from public bundle
60
packages/react/index.classic.fb.js
+1 -1
@@ -9,7 +9,7 @@
9
10 export {
11 __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
12 - act as unstable_act,
12 + act,
13 Children,
14 Component,
15 Fragment,
packages/react/index.experimental.js
+1 -1
@@ -9,7 +9,7 @@
9
10 export {
11 __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
12 - act as unstable_act,
12 + act,
13 Children,
14 Component,
15 Fragment,
packages/react/index.js
+1 -1
@@ -30,7 +30,7 @@ export type ChildrenArray<+T> = $ReadOnlyArray<ChildrenArray<T>> | T;
30 // We can't use export * from in Flow for some reason.
31 export {
32 __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
33 - act as unstable_act,
33 + act,
34 Children,
35 Component,
36 Fragment,
packages/react/index.modern.fb.js
+1 -1
@@ -9,7 +9,7 @@
9
10 export {
11 __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
12 - act as unstable_act,
12 + act,
13 Children,
14 Component,
15 Fragment,
packages/react/index.stable.js
+1 -1
@@ -9,7 +9,7 @@
9
10 export {
11 __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
12 - act as unstable_act,
12 + act,
13 Children,
14 Component,
15 Fragment,