Skip to content

Commit 6552583

Browse files
acdlitegaearon
authored andcommitted
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`.
1 parent a5e1d6c commit 6552583

18 files changed

+26
-20
lines changed

fixtures/dom/src/__tests__/nested-act-test.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ describe('unmocked scheduler', () => {
2020
beforeEach(() => {
2121
jest.resetModules();
2222
React = require('react');
23-
DOMAct = React.unstable_act;
23+
DOMAct = React.act;
2424
TestRenderer = require('react-test-renderer');
2525
TestAct = TestRenderer.act;
2626
});
@@ -61,7 +61,7 @@ describe('mocked scheduler', () => {
6161
require.requireActual('scheduler/unstable_mock')
6262
);
6363
React = require('react');
64-
DOMAct = React.unstable_act;
64+
DOMAct = React.act;
6565
TestRenderer = require('react-test-renderer');
6666
TestAct = TestRenderer.act;
6767
});

packages/react-devtools-shared/src/__tests__/storeComponentFilters-test.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ describe('Store component filters', () => {
1919
let utils;
2020

2121
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) {
2325
await React.unstable_act(callback);
2426
} else {
2527
callback();

packages/react-devtools-shared/src/__tests__/utils.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ export function act(
2121
const {act: actTestRenderer} = require('react-test-renderer');
2222
// Use `require('react-dom/test-utils').act` as a fallback for React 17, which can be used in integration tests for React DevTools.
2323
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;
2527

2628
actDOM(() => {
2729
actTestRenderer(() => {

packages/react-dom/src/__tests__/ReactDOMHydrationDiff-test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ describe('ReactDOMServerHydration', () => {
2525
React = require('react');
2626
ReactDOMClient = require('react-dom/client');
2727
ReactDOMServer = require('react-dom/server');
28-
act = React.unstable_act;
28+
act = React.act;
2929

3030
console.error = jest.fn();
3131
container = document.createElement('div');

packages/react-dom/src/__tests__/ReactTestUtilsActUnmockedScheduler-test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ beforeEach(() => {
3232
yields = [];
3333
React = require('react');
3434
ReactDOMClient = require('react-dom/client');
35-
act = React.unstable_act;
35+
act = React.act;
3636
container = document.createElement('div');
3737
document.body.appendChild(container);
3838
});

packages/react-dom/src/test-utils/ReactTestUtils.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ const getFiberCurrentPropsFromNode = EventInternals[2];
3939
const enqueueStateRestore = EventInternals[3];
4040
const restoreStateIfNeeded = EventInternals[4];
4141

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;
4345

4446
function Event(suffix) {}
4547

packages/react-reconciler/src/__tests__/ReactActWarnings-test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ describe('act warnings', () => {
2828
React = require('react');
2929
Scheduler = require('scheduler');
3030
ReactNoop = require('react-noop-renderer');
31-
act = React.unstable_act;
31+
act = React.act;
3232
useState = React.useState;
3333
Suspense = React.Suspense;
3434
startTransition = React.startTransition;

packages/react-reconciler/src/__tests__/ReactFiberHostContext-test.internal.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ describe('ReactFiberHostContext', () => {
2020
beforeEach(() => {
2121
jest.resetModules();
2222
React = require('react');
23-
act = React.unstable_act;
23+
act = React.act;
2424
ReactFiberReconciler = require('react-reconciler');
2525
ConcurrentRoot =
2626
require('react-reconciler/src/ReactRootTags').ConcurrentRoot;

packages/react-reconciler/src/__tests__/ReactIsomorphicAct-test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ describe('isomorphic act()', () => {
2828
ReactNoop = require('react-noop-renderer');
2929
DiscreteEventPriority =
3030
require('react-reconciler/constants').DiscreteEventPriority;
31-
act = React.unstable_act;
31+
act = React.act;
3232
use = React.use;
3333
Suspense = React.Suspense;
3434
startTransition = React.startTransition;

packages/react-reconciler/src/__tests__/ReactSchedulerIntegration-test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ describe('`act` bypasses Scheduler methods completely,', () => {
370370
}
371371

372372
const root = ReactNoop.createRoot();
373-
const publicAct = React.unstable_act;
373+
const publicAct = React.act;
374374
const prevIsReactActEnvironment = global.IS_REACT_ACT_ENVIRONMENT;
375375
try {
376376
global.IS_REACT_ACT_ENVIRONMENT = true;

packages/react-refresh/src/__tests__/ReactFresh-test.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ describe('ReactFresh', () => {
3434
ReactDOM = require('react-dom');
3535
ReactDOMClient = require('react-dom/client');
3636
Scheduler = require('scheduler');
37-
act = React.unstable_act;
37+
act = React.act;
3838
internalAct = require('internal-test-utils').act;
3939

4040
const InternalTestUtils = require('internal-test-utils');
@@ -3792,7 +3792,7 @@ describe('ReactFresh', () => {
37923792
React = require('react');
37933793
ReactDOM = require('react-dom');
37943794
Scheduler = require('scheduler');
3795-
act = React.unstable_act;
3795+
act = React.act;
37963796
internalAct = require('internal-test-utils').act;
37973797

37983798
// Important! Inject into the global hook *after* ReactDOM runs:

packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMForm-test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ describe('ReactFlightDOMForm', () => {
5454
ReactServerDOMClient = require('react-server-dom-webpack/client.edge');
5555
ReactDOMServer = require('react-dom/server.edge');
5656
ReactDOMClient = require('react-dom/client');
57-
act = React.unstable_act;
57+
act = React.act;
5858
useFormState = require('react-dom').useFormState;
5959
container = document.createElement('div');
6060
document.body.appendChild(container);

packages/react-test-renderer/src/ReactTestRenderer.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ import {getPublicInstance} from './ReactFiberConfigTestHost';
5454
import {ConcurrentRoot, LegacyRoot} from 'react-reconciler/src/ReactRootTags';
5555
import {allowConcurrentByDefault} from 'shared/ReactFeatureFlags';
5656

57-
const act = React.unstable_act;
57+
const act = React.act;
5858

5959
// TODO: Remove from public bundle
6060

packages/react/index.classic.fb.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
export {
1111
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
12-
act as unstable_act,
12+
act,
1313
Children,
1414
Component,
1515
Fragment,

packages/react/index.experimental.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
export {
1111
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
12-
act as unstable_act,
12+
act,
1313
Children,
1414
Component,
1515
Fragment,

packages/react/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export type ChildrenArray<+T> = $ReadOnlyArray<ChildrenArray<T>> | T;
3030
// We can't use export * from in Flow for some reason.
3131
export {
3232
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
33-
act as unstable_act,
33+
act,
3434
Children,
3535
Component,
3636
Fragment,

packages/react/index.modern.fb.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
export {
1111
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
12-
act as unstable_act,
12+
act,
1313
Children,
1414
Component,
1515
Fragment,

packages/react/index.stable.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
export {
1111
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
12-
act as unstable_act,
12+
act,
1313
Children,
1414
Component,
1515
Fragment,

0 commit comments

Comments
 (0)