10
10
'use strict' ;
11
11
12
12
let React ;
13
- let ReactDOM ;
13
+ let ReactDOMClient ;
14
14
let ReactDOMServer ;
15
15
let ReactFeatureFlags ;
16
16
17
+ let act ;
18
+
17
19
describe ( 'ReactLegacyContextDisabled' , ( ) => {
18
20
beforeEach ( ( ) => {
19
21
jest . resetModules ( ) ;
20
22
21
23
React = require ( 'react' ) ;
22
- ReactDOM = require ( 'react-dom' ) ;
24
+ ReactDOMClient = require ( 'react-dom/client ' ) ;
23
25
ReactDOMServer = require ( 'react-dom/server' ) ;
24
26
ReactFeatureFlags = require ( 'shared/ReactFeatureFlags' ) ;
25
27
ReactFeatureFlags . disableLegacyContext = true ;
28
+ act = require ( 'internal-test-utils' ) . act ;
29
+
30
+ act = require ( 'internal-test-utils' ) . act ;
26
31
} ) ;
27
32
28
33
function formatValue ( val ) {
@@ -38,7 +43,7 @@ describe('ReactLegacyContextDisabled', () => {
38
43
return JSON . stringify ( val ) ;
39
44
}
40
45
41
- it ( 'warns for legacy context' , ( ) => {
46
+ it ( 'warns for legacy context' , async ( ) => {
42
47
class LegacyProvider extends React . Component {
43
48
static childContextTypes = {
44
49
foo ( ) { } ,
@@ -81,17 +86,19 @@ describe('ReactLegacyContextDisabled', () => {
81
86
}
82
87
83
88
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
+ } ) ;
95
102
} ) . toErrorDev ( [
96
103
'LegacyProvider uses the legacy childContextTypes API which is no longer supported. ' +
97
104
'Use React.createContext() instead.' ,
@@ -104,19 +111,20 @@ describe('ReactLegacyContextDisabled', () => {
104
111
expect ( lifecycleContextLog ) . toEqual ( [ ] ) ;
105
112
106
113
// 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
+ } ) ;
117
125
expect ( container . textContent ) . toBe ( '{}undefinedundefined' ) ;
118
126
expect ( lifecycleContextLog ) . toEqual ( [ { } , { } , { } ] ) ;
119
- ReactDOM . unmountComponentAtNode ( container ) ;
127
+ root . unmount ( ) ;
120
128
121
129
// test server path.
122
130
let text ;
@@ -143,7 +151,7 @@ describe('ReactLegacyContextDisabled', () => {
143
151
expect ( lifecycleContextLog ) . toEqual ( [ { } , { } , { } ] ) ;
144
152
} ) ;
145
153
146
- it ( 'renders a tree with modern context' , ( ) => {
154
+ it ( 'renders a tree with modern context' , async ( ) => {
147
155
const Ctx = React . createContext ( ) ;
148
156
149
157
class Provider extends React . Component {
@@ -185,44 +193,48 @@ describe('ReactLegacyContextDisabled', () => {
185
193
}
186
194
187
195
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
+ } ) ;
198
208
expect ( container . textContent ) . toBe ( 'aaa' ) ;
199
209
expect ( lifecycleContextLog ) . toEqual ( [ ] ) ;
200
210
201
211
// 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
+ } ) ;
212
223
expect ( container . textContent ) . toBe ( 'aaa' ) ;
213
224
expect ( lifecycleContextLog ) . toEqual ( [ 'a' , 'a' , 'a' ] ) ;
214
225
lifecycleContextLog . length = 0 ;
215
226
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
+ } ) ;
226
238
expect ( container . textContent ) . toBe ( 'bbb' ) ;
227
239
if ( gate ( flags => flags . enableLazyContextPropagation ) ) {
228
240
// In the lazy propagation implementation, we don't check if context
@@ -233,6 +245,6 @@ describe('ReactLegacyContextDisabled', () => {
233
245
// changed, so we skipped sCU.
234
246
expect ( lifecycleContextLog ) . toEqual ( [ 'b' , 'b' ] ) ;
235
247
}
236
- ReactDOM . unmountComponentAtNode ( container ) ;
248
+ root . unmount ( ) ;
237
249
} ) ;
238
250
} ) ;
0 commit comments