diff --git a/packages/internal-test-utils/shouldIgnoreConsoleError.js b/packages/internal-test-utils/shouldIgnoreConsoleError.js index b0342368b14c6..c1e4ecb75bba1 100644 --- a/packages/internal-test-utils/shouldIgnoreConsoleError.js +++ b/packages/internal-test-utils/shouldIgnoreConsoleError.js @@ -23,7 +23,8 @@ module.exports = function shouldIgnoreConsoleError(format, args) { ) !== -1 || format.indexOf( 'ReactDOM.hydrate has not been supported since React 18', - ) !== -1 + ) !== -1 || + format.indexOf('react-test-renderer is deprecated.') !== -1 ) { // We haven't finished migrating our tests to use createRoot. return true; diff --git a/packages/internal-test-utils/shouldIgnoreConsoleWarn.js b/packages/internal-test-utils/shouldIgnoreConsoleWarn.js index 9fa8414263bbc..cde6264e01352 100644 --- a/packages/internal-test-utils/shouldIgnoreConsoleWarn.js +++ b/packages/internal-test-utils/shouldIgnoreConsoleWarn.js @@ -1,11 +1,5 @@ 'use strict'; module.exports = function shouldIgnoreConsoleWarn(format) { - if (typeof format === 'string') { - if (format.indexOf('Warning: react-test-renderer is deprecated.') === 0) { - return true; - } - } - return false; }; diff --git a/packages/react-devtools-shell/src/app/index.js b/packages/react-devtools-shell/src/app/index.js index f991d61363bd1..69f8566cbe6b4 100644 --- a/packages/react-devtools-shell/src/app/index.js +++ b/packages/react-devtools-shell/src/app/index.js @@ -31,6 +31,7 @@ ignoreErrors([ 'Warning: Unsafe lifecycle methods', 'Warning: %s is deprecated in StrictMode.', // findDOMNode 'Warning: ReactDOM.render was removed in React 19', + 'Warning: react-test-renderer is deprecated', ]); ignoreWarnings(['Warning: componentWillReceiveProps has been renamed']); ignoreLogs([]); diff --git a/packages/react-reconciler/src/__tests__/ReactHooks-test.internal.js b/packages/react-reconciler/src/__tests__/ReactHooks-test.internal.js index be4119bb797b9..476838776f329 100644 --- a/packages/react-reconciler/src/__tests__/ReactHooks-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactHooks-test.internal.js @@ -19,6 +19,7 @@ let Scheduler; let ReactDOMServer; let act; let assertLog; +let assertConsoleErrorDev; let waitForAll; let waitForThrow; @@ -35,6 +36,7 @@ describe('ReactHooks', () => { const InternalTestUtils = require('internal-test-utils'); assertLog = InternalTestUtils.assertLog; + assertConsoleErrorDev = InternalTestUtils.assertConsoleErrorDev; waitForAll = InternalTestUtils.waitForAll; waitForThrow = InternalTestUtils.waitForThrow; }); @@ -1810,7 +1812,6 @@ describe('ReactHooks', () => { // Regression test for #14674 it('does not swallow original error when updating another component in render phase', async () => { const {useState} = React; - spyOnDev(console, 'error').mockImplementation(() => {}); let _setState; function A() { @@ -1837,14 +1838,10 @@ describe('ReactHooks', () => { ); }); }).rejects.toThrow('Hello'); - - if (__DEV__) { - expect(console.error).toHaveBeenCalledTimes(1); - expect(console.error.mock.calls[0][0]).toContain( - 'Warning: Cannot update a component (`%s`) while rendering ' + - 'a different component (`%s`).', - ); - } + assertConsoleErrorDev([ + 'Warning: Cannot update a component (`A`) while rendering ' + + 'a different component (`B`).', + ]); }); // Regression test for https://github.com/facebook/react/issues/15057 diff --git a/packages/react-reconciler/src/__tests__/ReactLazy-test.internal.js b/packages/react-reconciler/src/__tests__/ReactLazy-test.internal.js index 03b9d62732b56..9ed000d9d0b2e 100644 --- a/packages/react-reconciler/src/__tests__/ReactLazy-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactLazy-test.internal.js @@ -7,6 +7,7 @@ let waitFor; let waitForAll; let waitForThrow; let assertLog; +let assertConsoleErrorDev; let act; let fakeModuleCache; @@ -34,6 +35,7 @@ describe('ReactLazy', () => { waitForAll = InternalTestUtils.waitForAll; waitForThrow = InternalTestUtils.waitForThrow; assertLog = InternalTestUtils.assertLog; + assertConsoleErrorDev = InternalTestUtils.assertConsoleErrorDev; act = InternalTestUtils.act; fakeModuleCache = new Map(); @@ -205,8 +207,6 @@ describe('ReactLazy', () => { }); it('does not support arbitrary promises, only module objects', async () => { - spyOnDev(console, 'error').mockImplementation(() => {}); - const LazyText = lazy(async () => Text); const root = ReactTestRenderer.create(null, { @@ -228,13 +228,11 @@ describe('ReactLazy', () => { expect(error.message).toMatch('Element type is invalid'); assertLog(['Loading...']); + assertConsoleErrorDev([ + 'Expected the result of a dynamic import() call', + 'Expected the result of a dynamic import() call', + ]); expect(root).not.toMatchRenderedOutput('Hi'); - if (__DEV__) { - expect(console.error).toHaveBeenCalledTimes(2); - expect(console.error.mock.calls[0][0]).toContain( - 'Expected the result of a dynamic import() call', - ); - } }); it('throws if promise rejects', async () => { diff --git a/packages/react-test-renderer/src/ReactTestRenderer.js b/packages/react-test-renderer/src/ReactTestRenderer.js index 3d2f77a47e962..e23bc1f1663c2 100644 --- a/packages/react-test-renderer/src/ReactTestRenderer.js +++ b/packages/react-test-renderer/src/ReactTestRenderer.js @@ -475,7 +475,7 @@ function create( enableReactTestRendererWarning === true && global.IS_REACT_NATIVE_TEST_ENVIRONMENT !== true ) { - console.warn( + console.error( 'react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer', ); } diff --git a/packages/react-test-renderer/src/__tests__/ReactTestRenderer-test.internal.js b/packages/react-test-renderer/src/__tests__/ReactTestRenderer-test.internal.js index 4cd173d06f348..819f499884725 100644 --- a/packages/react-test-renderer/src/__tests__/ReactTestRenderer-test.internal.js +++ b/packages/react-test-renderer/src/__tests__/ReactTestRenderer-test.internal.js @@ -60,26 +60,25 @@ describe('ReactTestRenderer', () => { ReactFeatureFlags.enableReactTestRendererWarning = false; }); + // @gate __DEV__ it('should warn if enableReactTestRendererWarning is enabled', () => { + jest.spyOn(console, 'error').mockImplementation(() => {}); ReactFeatureFlags.enableReactTestRendererWarning = true; - expect(() => { - ReactTestRenderer.create(
); - }).toWarnDev( + ReactTestRenderer.create(
); + expect(console.error).toHaveBeenCalledTimes(1); + expect(console.error.mock.calls[0][0]).toContain( 'Warning: react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer', - {withoutStack: true}, ); + console.error.mockRestore(); }); - // @gate __DEV__ it('should not warn if enableReactTestRendererWarning is enabled but the RN global is set', () => { + jest.spyOn(console, 'error').mockImplementation(() => {}); global.IS_REACT_NATIVE_TEST_ENVIRONMENT = true; ReactFeatureFlags.enableReactTestRendererWarning = true; - expect(() => { - ReactTestRenderer.create(
); - }).not.toWarnDev( - 'Warning: react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer', - {withoutStack: true}, - ); + ReactTestRenderer.create(
); + expect(console.error).toHaveBeenCalledTimes(0); + console.error.mockRestore(); }); describe('root tags', () => {