diff --git a/packages/react-dom/src/__tests__/ReactTestUtils-test.js b/packages/react-dom/src/__tests__/ReactTestUtils-test.js index 6fe2ce4e2f753..e3ed7c71a6883 100644 --- a/packages/react-dom/src/__tests__/ReactTestUtils-test.js +++ b/packages/react-dom/src/__tests__/ReactTestUtils-test.js @@ -632,4 +632,18 @@ describe('ReactTestUtils', () => { 'See https://react.dev/warnings/react-dom-test-utils for more info.', ); }); + + // @gate __DEV__ + it('warns when using `act`', () => { + expect(() => { + ReactTestUtils.act(() => {}); + }).toErrorDev( + [ + '`ReactDOMTestUtils.act` is deprecated in favor of `React.act`. ' + + 'Import `act` from `react` instead of `react-dom/test-utils`. ' + + 'See https://react.dev/warnings/react-dom-test-utils for more info.', + ], + {withoutStack: true}, + ); + }); }); diff --git a/packages/react-dom/src/__tests__/ReactTestUtilsAct-test.js b/packages/react-dom/src/__tests__/ReactTestUtilsAct-test.js index 9f24801907ba1..c76b59ba6e40c 100644 --- a/packages/react-dom/src/__tests__/ReactTestUtilsAct-test.js +++ b/packages/react-dom/src/__tests__/ReactTestUtilsAct-test.js @@ -9,7 +9,6 @@ let React; let ReactDOMClient; -let ReactTestUtils; let Scheduler; let act; let container; @@ -27,7 +26,7 @@ function sleep(period) { }); } -describe('ReactTestUtils.act()', () => { +describe('React.act()', () => { afterEach(() => { jest.restoreAllMocks(); }); @@ -84,9 +83,8 @@ function runActTests(render, unmount, rerender) { jest.resetModules(); React = require('react'); ReactDOMClient = require('react-dom/client'); - ReactTestUtils = require('react-dom/test-utils'); Scheduler = require('scheduler'); - act = ReactTestUtils.act; + act = React.act; const InternalTestUtils = require('internal-test-utils'); assertLog = InternalTestUtils.assertLog; diff --git a/packages/react-dom/src/test-utils/ReactTestUtils.js b/packages/react-dom/src/test-utils/ReactTestUtils.js index 823cf8e46a696..1b4125c819e61 100644 --- a/packages/react-dom/src/test-utils/ReactTestUtils.js +++ b/packages/react-dom/src/test-utils/ReactTestUtils.js @@ -35,9 +35,18 @@ const getFiberCurrentPropsFromNode = EventInternals[2]; const enqueueStateRestore = EventInternals[3]; const restoreStateIfNeeded = EventInternals[4]; -// TODO: Add a warning if this API is accessed with advice to switch to -// importing directly from the React package instead. -const act = React.act; +let didWarnAboutUsingAct = false; +function act(callback) { + if (didWarnAboutUsingAct === false) { + didWarnAboutUsingAct = true; + console.error( + '`ReactDOMTestUtils.act` is deprecated in favor of `React.act`. ' + + 'Import `act` from `react` instead of `react-dom/test-utils`. ' + + 'See https://react.dev/warnings/react-dom-test-utils for more info.', + ); + } + return React.act(callback); +} function Event(suffix) {}