10
10
'use strict' ;
11
11
12
12
import { insertNodesAndExecuteScripts } from '../test-utils/FizzTestUtils' ;
13
+ import { patchMessageChannel } from '../../../../scripts/jest/patchMessageChannel' ;
13
14
14
15
// Polyfills for test environment
15
16
global . ReadableStream =
@@ -24,10 +25,13 @@ let ReactDOMClient;
24
25
let useFormStatus ;
25
26
let useOptimistic ;
26
27
let useActionState ;
28
+ let Scheduler ;
27
29
28
30
describe ( 'ReactDOMFizzForm' , ( ) => {
29
31
beforeEach ( ( ) => {
30
32
jest . resetModules ( ) ;
33
+ Scheduler = require ( 'scheduler' ) ;
34
+ patchMessageChannel ( Scheduler ) ;
31
35
React = require ( 'react' ) ;
32
36
ReactDOMServer = require ( 'react-dom/server.browser' ) ;
33
37
ReactDOMClient = require ( 'react-dom/client' ) ;
@@ -48,6 +52,14 @@ describe('ReactDOMFizzForm', () => {
48
52
document . body . removeChild ( container ) ;
49
53
} ) ;
50
54
55
+ async function serverAct ( callback ) {
56
+ let maybePromise ;
57
+ await act ( ( ) => {
58
+ maybePromise = callback ( ) ;
59
+ } ) ;
60
+ return maybePromise ;
61
+ }
62
+
51
63
function submit ( submitter ) {
52
64
const form = submitter . form || submitter ;
53
65
if ( ! submitter . form ) {
@@ -96,7 +108,9 @@ describe('ReactDOMFizzForm', () => {
96
108
) ;
97
109
}
98
110
99
- const stream = await ReactDOMServer . renderToReadableStream ( < App /> ) ;
111
+ const stream = await serverAct ( ( ) =>
112
+ ReactDOMServer . renderToReadableStream ( < App /> ) ,
113
+ ) ;
100
114
await readIntoContainer ( stream ) ;
101
115
await act ( async ( ) => {
102
116
ReactDOMClient . hydrateRoot ( container , < App /> ) ;
@@ -143,7 +157,9 @@ describe('ReactDOMFizzForm', () => {
143
157
) ;
144
158
}
145
159
146
- const stream = await ReactDOMServer . renderToReadableStream ( < App /> ) ;
160
+ const stream = await serverAct ( ( ) =>
161
+ ReactDOMServer . renderToReadableStream ( < App /> ) ,
162
+ ) ;
147
163
await readIntoContainer ( stream ) ;
148
164
await act ( async ( ) => {
149
165
ReactDOMClient . hydrateRoot ( container , < App /> ) ;
@@ -175,7 +191,9 @@ describe('ReactDOMFizzForm', () => {
175
191
) ;
176
192
}
177
193
178
- const stream = await ReactDOMServer . renderToReadableStream ( < App /> ) ;
194
+ const stream = await serverAct ( ( ) =>
195
+ ReactDOMServer . renderToReadableStream ( < App /> ) ,
196
+ ) ;
179
197
await readIntoContainer ( stream ) ;
180
198
await expect ( async ( ) => {
181
199
await act ( async ( ) => {
@@ -197,7 +215,9 @@ describe('ReactDOMFizzForm', () => {
197
215
) ;
198
216
}
199
217
200
- const stream = await ReactDOMServer . renderToReadableStream ( < App /> ) ;
218
+ const stream = await serverAct ( ( ) =>
219
+ ReactDOMServer . renderToReadableStream ( < App /> ) ,
220
+ ) ;
201
221
await readIntoContainer ( stream ) ;
202
222
// This should ideally warn because only the client provides a function that doesn't line up.
203
223
await act ( async ( ) => {
@@ -231,7 +251,9 @@ describe('ReactDOMFizzForm', () => {
231
251
) ;
232
252
}
233
253
234
- const stream = await ReactDOMServer . renderToReadableStream ( < App /> ) ;
254
+ const stream = await serverAct ( ( ) =>
255
+ ReactDOMServer . renderToReadableStream ( < App /> ) ,
256
+ ) ;
235
257
await readIntoContainer ( stream ) ;
236
258
let root ;
237
259
await act ( async ( ) => {
@@ -278,7 +300,9 @@ describe('ReactDOMFizzForm', () => {
278
300
) ;
279
301
}
280
302
281
- const stream = await ReactDOMServer . renderToReadableStream ( < App /> ) ;
303
+ const stream = await serverAct ( ( ) =>
304
+ ReactDOMServer . renderToReadableStream ( < App /> ) ,
305
+ ) ;
282
306
await readIntoContainer ( stream ) ;
283
307
let root ;
284
308
await act ( async ( ) => {
@@ -334,7 +358,9 @@ describe('ReactDOMFizzForm', () => {
334
358
// Specifying the extra form fields are a DEV error, but we expect it
335
359
// to eventually still be patched up after an update.
336
360
await expect ( async ( ) => {
337
- const stream = await ReactDOMServer . renderToReadableStream ( < App /> ) ;
361
+ const stream = await serverAct ( ( ) =>
362
+ ReactDOMServer . renderToReadableStream ( < App /> ) ,
363
+ ) ;
338
364
await readIntoContainer ( stream ) ;
339
365
} ) . toErrorDev ( [
340
366
'Cannot specify a encType or method for a form that specifies a function as the action.' ,
@@ -379,7 +405,9 @@ describe('ReactDOMFizzForm', () => {
379
405
return 'Pending: ' + pending ;
380
406
}
381
407
382
- const stream = await ReactDOMServer . renderToReadableStream ( < App /> ) ;
408
+ const stream = await serverAct ( ( ) =>
409
+ ReactDOMServer . renderToReadableStream ( < App /> ) ,
410
+ ) ;
383
411
await readIntoContainer ( stream ) ;
384
412
expect ( container . textContent ) . toBe ( 'Pending: false' ) ;
385
413
@@ -400,7 +428,9 @@ describe('ReactDOMFizzForm', () => {
400
428
) ;
401
429
}
402
430
403
- const stream = await ReactDOMServer . renderToReadableStream ( < App /> ) ;
431
+ const stream = await serverAct ( ( ) =>
432
+ ReactDOMServer . renderToReadableStream ( < App /> ) ,
433
+ ) ;
404
434
await readIntoContainer ( stream ) ;
405
435
406
436
// Dispatch an event before hydration
@@ -441,7 +471,9 @@ describe('ReactDOMFizzForm', () => {
441
471
) ;
442
472
}
443
473
444
- const stream = await ReactDOMServer . renderToReadableStream ( < App /> ) ;
474
+ const stream = await serverAct ( ( ) =>
475
+ ReactDOMServer . renderToReadableStream ( < App /> ) ,
476
+ ) ;
445
477
await readIntoContainer ( stream ) ;
446
478
447
479
submit ( container . getElementsByTagName ( 'input' ) [ 1 ] ) ;
@@ -463,7 +495,9 @@ describe('ReactDOMFizzForm', () => {
463
495
return optimisticState ;
464
496
}
465
497
466
- const stream = await ReactDOMServer . renderToReadableStream ( < App /> ) ;
498
+ const stream = await serverAct ( ( ) =>
499
+ ReactDOMServer . renderToReadableStream ( < App /> ) ,
500
+ ) ;
467
501
await readIntoContainer ( stream ) ;
468
502
expect ( container . textContent ) . toBe ( 'hi' ) ;
469
503
@@ -484,7 +518,9 @@ describe('ReactDOMFizzForm', () => {
484
518
return state ;
485
519
}
486
520
487
- const stream = await ReactDOMServer . renderToReadableStream ( < App /> ) ;
521
+ const stream = await serverAct ( ( ) =>
522
+ ReactDOMServer . renderToReadableStream ( < App /> ) ,
523
+ ) ;
488
524
await readIntoContainer ( stream ) ;
489
525
expect ( container . textContent ) . toBe ( '0' ) ;
490
526
@@ -521,7 +557,9 @@ describe('ReactDOMFizzForm', () => {
521
557
) ;
522
558
}
523
559
524
- const stream = await ReactDOMServer . renderToReadableStream ( < App /> ) ;
560
+ const stream = await serverAct ( ( ) =>
561
+ ReactDOMServer . renderToReadableStream ( < App /> ) ,
562
+ ) ;
525
563
await readIntoContainer ( stream ) ;
526
564
527
565
const form = container . firstChild ;
@@ -581,7 +619,9 @@ describe('ReactDOMFizzForm', () => {
581
619
) ;
582
620
}
583
621
584
- const stream = await ReactDOMServer . renderToReadableStream ( < App /> ) ;
622
+ const stream = await serverAct ( ( ) =>
623
+ ReactDOMServer . renderToReadableStream ( < App /> ) ,
624
+ ) ;
585
625
await readIntoContainer ( stream ) ;
586
626
587
627
const input = container . getElementsByTagName ( 'input' ) [ 1 ] ;
@@ -651,7 +691,9 @@ describe('ReactDOMFizzForm', () => {
651
691
) ;
652
692
}
653
693
654
- const stream = await ReactDOMServer . renderToReadableStream ( < App /> ) ;
694
+ const stream = await serverAct ( ( ) =>
695
+ ReactDOMServer . renderToReadableStream ( < App /> ) ,
696
+ ) ;
655
697
await readIntoContainer ( stream ) ;
656
698
657
699
const barField = container . querySelector ( '[name=bar]' ) ;
0 commit comments