1010'use strict' ;
1111
1212let React ;
13- let ReactDOM ;
13+ let ReactDOMClient ;
1414let ReactDOMServer ;
1515let ReactFeatureFlags ;
1616
17+ let act ;
18+
1719describe ( 'ReactLegacyContextDisabled' , ( ) => {
1820 beforeEach ( ( ) => {
1921 jest . resetModules ( ) ;
2022
2123 React = require ( 'react' ) ;
22- ReactDOM = require ( 'react-dom' ) ;
24+ ReactDOMClient = require ( 'react-dom/client ' ) ;
2325 ReactDOMServer = require ( 'react-dom/server' ) ;
2426 ReactFeatureFlags = require ( 'shared/ReactFeatureFlags' ) ;
2527 ReactFeatureFlags . disableLegacyContext = true ;
28+ act = require ( 'internal-test-utils' ) . act ;
29+
30+ act = require ( 'internal-test-utils' ) . act ;
2631 } ) ;
2732
2833 function formatValue ( val ) {
@@ -38,7 +43,7 @@ describe('ReactLegacyContextDisabled', () => {
3843 return JSON . stringify ( val ) ;
3944 }
4045
41- it ( 'warns for legacy context' , ( ) => {
46+ it ( 'warns for legacy context' , async ( ) => {
4247 class LegacyProvider extends React . Component {
4348 static childContextTypes = {
4449 foo ( ) { } ,
@@ -81,17 +86,19 @@ describe('ReactLegacyContextDisabled', () => {
8186 }
8287
8388 const container = document . createElement ( 'div' ) ;
84- expect ( ( ) => {
85- ReactDOM . render (
86- < LegacyProvider >
87- < span >
88- < LegacyClsConsumer />
89- < LegacyFnConsumer />
90- < RegularFn />
91- </ span >
92- </ LegacyProvider > ,
93- container ,
94- ) ;
89+ const root = ReactDOMClient . createRoot ( container ) ;
90+ await expect ( async ( ) => {
91+ await act ( ( ) => {
92+ root . render (
93+ < LegacyProvider >
94+ < span >
95+ < LegacyClsConsumer />
96+ < LegacyFnConsumer />
97+ < RegularFn />
98+ </ span >
99+ </ LegacyProvider > ,
100+ ) ;
101+ } ) ;
95102 } ) . toErrorDev ( [
96103 'LegacyProvider uses the legacy childContextTypes API which is no longer supported. ' +
97104 'Use React.createContext() instead.' ,
@@ -104,19 +111,20 @@ describe('ReactLegacyContextDisabled', () => {
104111 expect ( lifecycleContextLog ) . toEqual ( [ ] ) ;
105112
106113 // Test update path.
107- ReactDOM . render (
108- < LegacyProvider >
109- < span >
110- < LegacyClsConsumer />
111- < LegacyFnConsumer />
112- < RegularFn />
113- </ span >
114- </ LegacyProvider > ,
115- container ,
116- ) ;
114+ await act ( ( ) => {
115+ root . render (
116+ < LegacyProvider >
117+ < span >
118+ < LegacyClsConsumer />
119+ < LegacyFnConsumer />
120+ < RegularFn />
121+ </ span >
122+ </ LegacyProvider > ,
123+ ) ;
124+ } ) ;
117125 expect ( container . textContent ) . toBe ( '{}undefinedundefined' ) ;
118126 expect ( lifecycleContextLog ) . toEqual ( [ { } , { } , { } ] ) ;
119- ReactDOM . unmountComponentAtNode ( container ) ;
127+ root . unmount ( ) ;
120128
121129 // test server path.
122130 let text ;
@@ -143,7 +151,7 @@ describe('ReactLegacyContextDisabled', () => {
143151 expect ( lifecycleContextLog ) . toEqual ( [ { } , { } , { } ] ) ;
144152 } ) ;
145153
146- it ( 'renders a tree with modern context' , ( ) => {
154+ it ( 'renders a tree with modern context' , async ( ) => {
147155 const Ctx = React . createContext ( ) ;
148156
149157 class Provider extends React . Component {
@@ -185,44 +193,48 @@ describe('ReactLegacyContextDisabled', () => {
185193 }
186194
187195 const container = document . createElement ( 'div' ) ;
188- ReactDOM . render (
189- < Provider value = "a" >
190- < span >
191- < RenderPropConsumer />
192- < ContextTypeConsumer />
193- < FnConsumer />
194- </ span >
195- </ Provider > ,
196- container ,
197- ) ;
196+ const root = ReactDOMClient . createRoot ( container ) ;
197+ await act ( ( ) => {
198+ root . render (
199+ < Provider value = "a" >
200+ < span >
201+ < RenderPropConsumer />
202+ < ContextTypeConsumer />
203+ < FnConsumer />
204+ </ span >
205+ </ Provider > ,
206+ ) ;
207+ } ) ;
198208 expect ( container . textContent ) . toBe ( 'aaa' ) ;
199209 expect ( lifecycleContextLog ) . toEqual ( [ ] ) ;
200210
201211 // Test update path
202- ReactDOM . render (
203- < Provider value = "a" >
204- < span >
205- < RenderPropConsumer />
206- < ContextTypeConsumer />
207- < FnConsumer />
208- </ span >
209- </ Provider > ,
210- container ,
211- ) ;
212+ await act ( ( ) => {
213+ root . render (
214+ < Provider value = "a" >
215+ < span >
216+ < RenderPropConsumer />
217+ < ContextTypeConsumer />
218+ < FnConsumer />
219+ </ span >
220+ </ Provider > ,
221+ ) ;
222+ } ) ;
212223 expect ( container . textContent ) . toBe ( 'aaa' ) ;
213224 expect ( lifecycleContextLog ) . toEqual ( [ 'a' , 'a' , 'a' ] ) ;
214225 lifecycleContextLog . length = 0 ;
215226
216- ReactDOM . render (
217- < Provider value = "b" >
218- < span >
219- < RenderPropConsumer />
220- < ContextTypeConsumer />
221- < FnConsumer />
222- </ span >
223- </ Provider > ,
224- container ,
225- ) ;
227+ await act ( ( ) => {
228+ root . render (
229+ < Provider value = "b" >
230+ < span >
231+ < RenderPropConsumer />
232+ < ContextTypeConsumer />
233+ < FnConsumer />
234+ </ span >
235+ </ Provider > ,
236+ ) ;
237+ } ) ;
226238 expect ( container . textContent ) . toBe ( 'bbb' ) ;
227239 if ( gate ( flags => flags . enableLazyContextPropagation ) ) {
228240 // In the lazy propagation implementation, we don't check if context
@@ -233,6 +245,6 @@ describe('ReactLegacyContextDisabled', () => {
233245 // changed, so we skipped sCU.
234246 expect ( lifecycleContextLog ) . toEqual ( [ 'b' , 'b' ] ) ;
235247 }
236- ReactDOM . unmountComponentAtNode ( container ) ;
248+ root . unmount ( ) ;
237249 } ) ;
238250} ) ;
0 commit comments