@@ -1368,7 +1368,7 @@ describe('ReactHooks', () => {
1368
1368
} ) ;
1369
1369
1370
1370
// Regression test for https://github.com/facebook/react/issues/14790
1371
- it ( 'does not fire a false positive warning when suspending' , async ( ) => {
1371
+ it ( 'does not fire a false positive warning when suspending memo ' , async ( ) => {
1372
1372
const { Suspense, useState, useRef} = React ;
1373
1373
1374
1374
let wasSuspended = false ;
@@ -1397,4 +1397,66 @@ describe('ReactHooks', () => {
1397
1397
await Promise . resolve ( ) ;
1398
1398
expect ( root ) . toMatchRenderedOutput ( 'hello' ) ;
1399
1399
} ) ;
1400
+
1401
+ // Regression test for https://github.com/facebook/react/issues/14790
1402
+ it ( 'does not fire a false positive warning when suspending forwardRef' , async ( ) => {
1403
+ const { Suspense, useState, useRef} = React ;
1404
+
1405
+ let wasSuspended = false ;
1406
+ function trySuspend ( ) {
1407
+ if ( ! wasSuspended ) {
1408
+ throw new Promise ( resolve => {
1409
+ wasSuspended = true ;
1410
+ resolve ( ) ;
1411
+ } ) ;
1412
+ }
1413
+ }
1414
+
1415
+ function render ( props , ref ) {
1416
+ React . useState ( ) ;
1417
+ trySuspend ( ) ;
1418
+ return 'hello' ;
1419
+ }
1420
+
1421
+ const Wrapper = React . forwardRef ( render ) ;
1422
+ const root = ReactTestRenderer . create (
1423
+ < Suspense fallback = "loading" >
1424
+ < Wrapper />
1425
+ </ Suspense > ,
1426
+ ) ;
1427
+ expect ( root ) . toMatchRenderedOutput ( 'loading' ) ;
1428
+ await Promise . resolve ( ) ;
1429
+ expect ( root ) . toMatchRenderedOutput ( 'hello' ) ;
1430
+ } ) ;
1431
+
1432
+ // Regression test for https://github.com/facebook/react/issues/14790
1433
+ it ( 'does not fire a false positive warning when suspending memo(forwardRef)' , async ( ) => {
1434
+ const { Suspense, useState, useRef} = React ;
1435
+
1436
+ let wasSuspended = false ;
1437
+ function trySuspend ( ) {
1438
+ if ( ! wasSuspended ) {
1439
+ throw new Promise ( resolve => {
1440
+ wasSuspended = true ;
1441
+ resolve ( ) ;
1442
+ } ) ;
1443
+ }
1444
+ }
1445
+
1446
+ function render ( props , ref ) {
1447
+ React . useState ( ) ;
1448
+ trySuspend ( ) ;
1449
+ return 'hello' ;
1450
+ }
1451
+
1452
+ const Wrapper = React . memo ( React . forwardRef ( render ) ) ;
1453
+ const root = ReactTestRenderer . create (
1454
+ < Suspense fallback = "loading" >
1455
+ < Wrapper />
1456
+ </ Suspense > ,
1457
+ ) ;
1458
+ expect ( root ) . toMatchRenderedOutput ( 'loading' ) ;
1459
+ await Promise . resolve ( ) ;
1460
+ expect ( root ) . toMatchRenderedOutput ( 'hello' ) ;
1461
+ } ) ;
1400
1462
} ) ;
0 commit comments