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
+ let act ;
16
17
17
18
describe ( 'ReactLegacyContextDisabled' , ( ) => {
18
19
beforeEach ( ( ) => {
19
20
jest . resetModules ( ) ;
20
21
21
22
React = require ( 'react' ) ;
22
- ReactDOM = require ( 'react-dom' ) ;
23
+ ReactDOMClient = require ( 'react-dom/client ' ) ;
23
24
ReactDOMServer = require ( 'react-dom/server' ) ;
24
25
ReactFeatureFlags = require ( 'shared/ReactFeatureFlags' ) ;
25
26
ReactFeatureFlags . disableLegacyContext = true ;
27
+ act = require ( 'internal-test-utils' ) . act ;
26
28
} ) ;
27
29
28
30
function formatValue ( val ) {
@@ -38,7 +40,7 @@ describe('ReactLegacyContextDisabled', () => {
38
40
return JSON . stringify ( val ) ;
39
41
}
40
42
41
- it ( 'warns for legacy context' , ( ) => {
43
+ it ( 'warns for legacy context' , async ( ) => {
42
44
class LegacyProvider extends React . Component {
43
45
static childContextTypes = {
44
46
foo ( ) { } ,
@@ -81,17 +83,19 @@ describe('ReactLegacyContextDisabled', () => {
81
83
}
82
84
83
85
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
- ) ;
86
+ const root = ReactDOMClient . createRoot ( container ) ;
87
+ await expect ( async ( ) => {
88
+ await act ( ( ) => {
89
+ root . render (
90
+ < LegacyProvider >
91
+ < span >
92
+ < LegacyClsConsumer />
93
+ < LegacyFnConsumer />
94
+ < RegularFn />
95
+ </ span >
96
+ </ LegacyProvider > ,
97
+ ) ;
98
+ } ) ;
95
99
} ) . toErrorDev ( [
96
100
'LegacyProvider uses the legacy childContextTypes API which is no longer supported. ' +
97
101
'Use React.createContext() instead.' ,
@@ -104,19 +108,20 @@ describe('ReactLegacyContextDisabled', () => {
104
108
expect ( lifecycleContextLog ) . toEqual ( [ ] ) ;
105
109
106
110
// Test update path.
107
- ReactDOM . render (
108
- < LegacyProvider >
109
- < span >
110
- < LegacyClsConsumer />
111
- < LegacyFnConsumer />
112
- < RegularFn />
113
- </ span >
114
- </ LegacyProvider > ,
115
- container ,
116
- ) ;
111
+ await act ( ( ) => {
112
+ root . render (
113
+ < LegacyProvider >
114
+ < span >
115
+ < LegacyClsConsumer />
116
+ < LegacyFnConsumer />
117
+ < RegularFn />
118
+ </ span >
119
+ </ LegacyProvider > ,
120
+ ) ;
121
+ } ) ;
117
122
expect ( container . textContent ) . toBe ( '{}undefinedundefined' ) ;
118
123
expect ( lifecycleContextLog ) . toEqual ( [ { } , { } , { } ] ) ;
119
- ReactDOM . unmountComponentAtNode ( container ) ;
124
+ root . unmount ( ) ;
120
125
121
126
// test server path.
122
127
let text ;
@@ -143,7 +148,7 @@ describe('ReactLegacyContextDisabled', () => {
143
148
expect ( lifecycleContextLog ) . toEqual ( [ { } , { } , { } ] ) ;
144
149
} ) ;
145
150
146
- it ( 'renders a tree with modern context' , ( ) => {
151
+ it ( 'renders a tree with modern context' , async ( ) => {
147
152
const Ctx = React . createContext ( ) ;
148
153
149
154
class Provider extends React . Component {
@@ -185,44 +190,48 @@ describe('ReactLegacyContextDisabled', () => {
185
190
}
186
191
187
192
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
- ) ;
193
+ const root = ReactDOMClient . createRoot ( container ) ;
194
+ await act ( ( ) => {
195
+ root . render (
196
+ < Provider value = "a" >
197
+ < span >
198
+ < RenderPropConsumer />
199
+ < ContextTypeConsumer />
200
+ < FnConsumer />
201
+ </ span >
202
+ </ Provider > ,
203
+ ) ;
204
+ } ) ;
198
205
expect ( container . textContent ) . toBe ( 'aaa' ) ;
199
206
expect ( lifecycleContextLog ) . toEqual ( [ ] ) ;
200
207
201
208
// 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
- ) ;
209
+ await act ( ( ) => {
210
+ root . render (
211
+ < Provider value = "a" >
212
+ < span >
213
+ < RenderPropConsumer />
214
+ < ContextTypeConsumer />
215
+ < FnConsumer />
216
+ </ span >
217
+ </ Provider > ,
218
+ ) ;
219
+ } ) ;
212
220
expect ( container . textContent ) . toBe ( 'aaa' ) ;
213
221
expect ( lifecycleContextLog ) . toEqual ( [ 'a' , 'a' , 'a' ] ) ;
214
222
lifecycleContextLog . length = 0 ;
215
223
216
- ReactDOM . render (
217
- < Provider value = "b" >
218
- < span >
219
- < RenderPropConsumer />
220
- < ContextTypeConsumer />
221
- < FnConsumer />
222
- </ span >
223
- </ Provider > ,
224
- container ,
225
- ) ;
224
+ await act ( ( ) => {
225
+ root . render (
226
+ < Provider value = "b" >
227
+ < span >
228
+ < RenderPropConsumer />
229
+ < ContextTypeConsumer />
230
+ < FnConsumer />
231
+ </ span >
232
+ </ Provider > ,
233
+ ) ;
234
+ } ) ;
226
235
expect ( container . textContent ) . toBe ( 'bbb' ) ;
227
236
if ( gate ( flags => flags . enableLazyContextPropagation ) ) {
228
237
// In the lazy propagation implementation, we don't check if context
@@ -233,6 +242,6 @@ describe('ReactLegacyContextDisabled', () => {
233
242
// changed, so we skipped sCU.
234
243
expect ( lifecycleContextLog ) . toEqual ( [ 'b' , 'b' ] ) ;
235
244
}
236
- ReactDOM . unmountComponentAtNode ( container ) ;
245
+ root . unmount ( ) ;
237
246
} ) ;
238
247
} ) ;
0 commit comments