@@ -27,10 +27,7 @@ const QUERY_DURATION = 1000
27
27
28
28
const createQuery : ( id : number ) => NumberQueryOptions = ( id ) => ( {
29
29
queryKey : [ id ] ,
30
- queryFn : async ( ) => {
31
- await sleep ( QUERY_DURATION )
32
- return id
33
- } ,
30
+ queryFn : ( ) => sleep ( QUERY_DURATION ) . then ( ( ) => id ) ,
34
31
} )
35
32
const resolveQueries = ( ) => vi . advanceTimersByTimeAsync ( QUERY_DURATION )
36
33
@@ -59,7 +56,7 @@ describe('useSuspenseQueries', () => {
59
56
onSuspend ( )
60
57
} , [ ] )
61
58
62
- return null
59
+ return 'loading'
63
60
}
64
61
65
62
const withSuspenseWrapper = < T extends object > ( Component : React . FC < T > ) => {
@@ -158,10 +155,7 @@ describe('useSuspenseQueries', () => {
158
155
const data = useSuspenseQueries ( {
159
156
queries : [ 1 , 2 , 3 ] . map ( ( value ) => ( {
160
157
queryKey : [ ...key , { value } ] ,
161
- queryFn : async ( ) => {
162
- await sleep ( value * 10 )
163
- return { value : value * 10 }
164
- } ,
158
+ queryFn : ( ) => sleep ( value * 10 ) . then ( ( ) => ( { value : value * 10 } ) ) ,
165
159
} ) ) ,
166
160
combine : ( result ) => {
167
161
spy ( result )
@@ -174,15 +168,18 @@ describe('useSuspenseQueries', () => {
174
168
175
169
const rendered = renderWithClient (
176
170
queryClient ,
177
- < React . Suspense fallback = "loading... " >
171
+ < React . Suspense fallback = "loading" >
178
172
< Page />
179
173
</ React . Suspense > ,
180
174
)
181
175
182
- expect ( rendered . getByText ( 'loading...' ) ) . toBeInTheDocument ( )
176
+ expect ( rendered . getByText ( 'loading' ) ) . toBeInTheDocument ( )
177
+
183
178
expect ( spy ) . not . toHaveBeenCalled ( )
179
+
184
180
await act ( ( ) => vi . advanceTimersByTimeAsync ( 30 ) )
185
181
expect ( rendered . getByText ( 'data' ) ) . toBeInTheDocument ( )
182
+
186
183
expect ( spy ) . toHaveBeenCalled ( )
187
184
} )
188
185
} )
@@ -211,22 +208,23 @@ describe('useSuspenseQueries 2', () => {
211
208
queries : [
212
209
{
213
210
queryKey : key1 ,
214
- queryFn : async ( ) => {
215
- results . push ( '1' )
216
- await sleep ( 10 )
217
- return '1'
218
- } ,
211
+ queryFn : ( ) =>
212
+ sleep ( 10 ) . then ( ( ) => {
213
+ results . push ( '1' )
214
+ return '1'
215
+ } ) ,
219
216
} ,
220
217
{
221
218
queryKey : key2 ,
222
- queryFn : async ( ) => {
223
- results . push ( '2' )
224
- await sleep ( 20 )
225
- return '2'
226
- } ,
219
+ queryFn : ( ) =>
220
+ sleep ( 20 ) . then ( ( ) => {
221
+ results . push ( '2' )
222
+ return '2'
223
+ } ) ,
227
224
} ,
228
225
] ,
229
226
} )
227
+
230
228
return (
231
229
< div >
232
230
< h1 > data: { result . map ( ( item ) => item . data ?? 'null' ) . join ( ',' ) } </ h1 >
@@ -244,7 +242,8 @@ describe('useSuspenseQueries 2', () => {
244
242
expect ( rendered . getByText ( 'loading' ) ) . toBeInTheDocument ( )
245
243
await act ( ( ) => vi . advanceTimersByTimeAsync ( 20 ) )
246
244
expect ( rendered . getByText ( 'data: 1,2' ) ) . toBeInTheDocument ( )
247
- expect ( results ) . toEqual ( [ '1' , '2' , 'loading' ] )
245
+
246
+ expect ( results ) . toEqual ( [ 'loading' , '1' , '2' ] )
248
247
} )
249
248
250
249
it ( "shouldn't unmount before all promises fetched" , async ( ) => {
@@ -264,24 +263,25 @@ describe('useSuspenseQueries 2', () => {
264
263
queries : [
265
264
{
266
265
queryKey : key1 ,
267
- queryFn : async ( ) => {
268
- refs . push ( ref . current )
269
- results . push ( '1' )
270
- await sleep ( 10 )
271
- return '1'
272
- } ,
266
+ queryFn : ( ) =>
267
+ sleep ( 10 ) . then ( ( ) => {
268
+ refs . push ( ref . current )
269
+ results . push ( '1' )
270
+ return '1'
271
+ } ) ,
273
272
} ,
274
273
{
275
274
queryKey : key2 ,
276
- queryFn : async ( ) => {
277
- refs . push ( ref . current )
278
- results . push ( '2' )
279
- await sleep ( 20 )
280
- return '2'
281
- } ,
275
+ queryFn : ( ) =>
276
+ sleep ( 20 ) . then ( ( ) => {
277
+ refs . push ( ref . current )
278
+ results . push ( '2' )
279
+ return '2'
280
+ } ) ,
282
281
} ,
283
282
] ,
284
283
} )
284
+
285
285
return (
286
286
< div >
287
287
< h1 > data: { result . map ( ( item ) => item . data ?? 'null' ) . join ( ',' ) } </ h1 >
@@ -297,9 +297,11 @@ describe('useSuspenseQueries 2', () => {
297
297
)
298
298
299
299
expect ( rendered . getByText ( 'loading' ) ) . toBeInTheDocument ( )
300
- expect ( refs . length ) . toBe ( 2 )
300
+
301
301
await act ( ( ) => vi . advanceTimersByTimeAsync ( 20 ) )
302
302
expect ( rendered . getByText ( 'data: 1,2' ) ) . toBeInTheDocument ( )
303
+
304
+ expect ( refs . length ) . toBe ( 2 )
303
305
expect ( refs [ 0 ] ) . toBe ( refs [ 1 ] )
304
306
} )
305
307
@@ -348,6 +350,7 @@ describe('useSuspenseQueries 2', () => {
348
350
document . dispatchEvent ( new CustomEvent ( 'online' ) )
349
351
350
352
fireEvent . click ( rendered . getByText ( 'fetch' ) )
353
+ expect ( rendered . getByText ( 'loading' ) ) . toBeInTheDocument ( )
351
354
await act ( ( ) => vi . advanceTimersByTimeAsync ( 10 ) )
352
355
// query should resume
353
356
expect ( rendered . getByText ( 'Data 1' ) ) . toBeInTheDocument ( )
@@ -374,30 +377,33 @@ describe('useSuspenseQueries 2', () => {
374
377
return (
375
378
< div >
376
379
< button onClick = { ( ) => setFail ( true ) } > trigger fail</ button >
377
-
378
- < div > rendered: { String ( data ) } </ div >
380
+ < div > rendered: { data } </ div >
379
381
</ div >
380
382
)
381
383
}
382
384
383
385
const rendered = renderWithClient (
384
386
queryClient ,
385
387
< ErrorBoundary fallbackRender = { ( ) => < div > error boundary</ div > } >
386
- < React . Suspense fallback = { 'Loading...' } >
388
+ < React . Suspense fallback = "loading" >
387
389
< Page />
388
390
</ React . Suspense >
389
391
</ ErrorBoundary > ,
390
392
)
391
393
392
- expect ( rendered . getByText ( 'Loading... ' ) ) . toBeInTheDocument ( )
394
+ expect ( rendered . getByText ( 'loading ' ) ) . toBeInTheDocument ( )
393
395
await act ( ( ) => vi . advanceTimersByTimeAsync ( 10 ) )
394
396
expect ( rendered . getByText ( 'rendered: data' ) ) . toBeInTheDocument ( )
397
+
395
398
fireEvent . click ( rendered . getByText ( 'trigger fail' ) )
399
+ expect ( rendered . getByText ( 'loading' ) ) . toBeInTheDocument ( )
396
400
await act ( ( ) => vi . advanceTimersByTimeAsync ( 10 ) )
397
401
expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( )
402
+
398
403
expect ( consoleMock . mock . calls [ 0 ] ?. [ 1 ] ) . toStrictEqual (
399
404
new Error ( 'Suspense Error Bingo' ) ,
400
405
)
406
+
401
407
consoleMock . mockRestore ( )
402
408
} )
403
409
@@ -409,7 +415,7 @@ describe('useSuspenseQueries 2', () => {
409
415
const [ isPending , startTransition ] = React . useTransition ( )
410
416
const { data } = useSuspenseQuery ( {
411
417
queryKey : [ key , count ] ,
412
- queryFn : async ( ) => sleep ( 10 ) . then ( ( ) => 'data' + count ) ,
418
+ queryFn : ( ) => sleep ( 10 ) . then ( ( ) => 'data' + count ) ,
413
419
} )
414
420
415
421
return (
@@ -418,23 +424,24 @@ describe('useSuspenseQueries 2', () => {
418
424
inc
419
425
</ button >
420
426
421
- < div > { isPending ? 'Pending... ' : String ( data ) } </ div >
427
+ < div > { isPending ? 'pending ' : data } </ div >
422
428
</ div >
423
429
)
424
430
}
425
431
426
432
const rendered = renderWithClient (
427
433
queryClient ,
428
- < React . Suspense fallback = { 'Loading...' } >
434
+ < React . Suspense fallback = "loading" >
429
435
< Page />
430
436
</ React . Suspense > ,
431
437
)
432
438
433
- expect ( rendered . getByText ( 'Loading... ' ) ) . toBeInTheDocument ( )
439
+ expect ( rendered . getByText ( 'loading ' ) ) . toBeInTheDocument ( )
434
440
await act ( ( ) => vi . advanceTimersByTimeAsync ( 10 ) )
435
441
expect ( rendered . getByText ( 'data0' ) ) . toBeInTheDocument ( )
442
+
436
443
fireEvent . click ( rendered . getByText ( 'inc' ) )
437
- expect ( rendered . getByText ( 'Pending... ' ) ) . toBeInTheDocument ( )
444
+ expect ( rendered . getByText ( 'pending ' ) ) . toBeInTheDocument ( )
438
445
await act ( ( ) => vi . advanceTimersByTimeAsync ( 10 ) )
439
446
expect ( rendered . getByText ( 'data1' ) ) . toBeInTheDocument ( )
440
447
} )
@@ -453,7 +460,7 @@ describe('useSuspenseQueries 2', () => {
453
460
>
454
461
inc
455
462
</ button >
456
- < React . Suspense fallback = { 'Loading...' } >
463
+ < React . Suspense fallback = "loading" >
457
464
< Page count = { count } />
458
465
</ React . Suspense >
459
466
</ div >
@@ -463,11 +470,11 @@ describe('useSuspenseQueries 2', () => {
463
470
function Page ( { count } : { count : number } ) {
464
471
const { data } = useSuspenseQuery ( {
465
472
queryKey : [ key , count ] ,
466
- queryFn : async ( ) => {
467
- queryFnCount ++
468
- await sleep ( 10 )
469
- return 'data' + count
470
- } ,
473
+ queryFn : ( ) =>
474
+ sleep ( 10 ) . then ( ( ) => {
475
+ queryFnCount ++
476
+ return 'data' + count
477
+ } ) ,
471
478
} )
472
479
473
480
return (
@@ -483,12 +490,14 @@ describe('useSuspenseQueries 2', () => {
483
490
< App /> ,
484
491
)
485
492
486
- expect ( rendered . getByText ( 'Loading... ' ) ) . toBeInTheDocument ( )
493
+ expect ( rendered . getByText ( 'loading ' ) ) . toBeInTheDocument ( )
487
494
await act ( ( ) => vi . advanceTimersByTimeAsync ( 10 ) )
488
495
expect ( rendered . getByText ( 'data0' ) ) . toBeInTheDocument ( )
496
+
489
497
fireEvent . click ( rendered . getByText ( 'inc' ) )
490
498
await act ( ( ) => vi . advanceTimersByTimeAsync ( 10 ) )
491
499
expect ( rendered . getByText ( 'data1' ) ) . toBeInTheDocument ( )
500
+
492
501
expect ( queryFnCount ) . toBe ( 2 )
493
502
} )
494
503
@@ -507,32 +516,32 @@ describe('useSuspenseQueries 2', () => {
507
516
const [ isPending , startTransition ] = React . useTransition ( )
508
517
const { data } = useSuspenseQuery ( {
509
518
queryKey : [ key , count ] ,
510
- queryFn : async ( ) => sleep ( 10 ) . then ( ( ) => 'data' + count ) ,
519
+ queryFn : ( ) => sleep ( 10 ) . then ( ( ) => 'data' + count ) ,
511
520
} )
512
521
513
522
return (
514
523
< div >
515
524
< button onClick = { ( ) => startTransition ( ( ) => setCount ( count + 1 ) ) } >
516
525
inc
517
526
</ button >
518
-
519
- < div > { isPending ? 'Pending...' : String ( data ) } </ div >
527
+ < div > { isPending ? 'pending' : data } </ div >
520
528
</ div >
521
529
)
522
530
}
523
531
524
532
const rendered = renderWithClient (
525
533
queryClientWithPlaceholder ,
526
- < React . Suspense fallback = { 'Loading...' } >
534
+ < React . Suspense fallback = "loading" >
527
535
< Page />
528
536
</ React . Suspense > ,
529
537
)
530
538
531
- expect ( rendered . getByText ( 'Loading... ' ) ) . toBeInTheDocument ( )
539
+ expect ( rendered . getByText ( 'loading ' ) ) . toBeInTheDocument ( )
532
540
await act ( ( ) => vi . advanceTimersByTimeAsync ( 10 ) )
533
541
expect ( rendered . getByText ( 'data0' ) ) . toBeInTheDocument ( )
542
+
534
543
fireEvent . click ( rendered . getByText ( 'inc' ) )
535
- expect ( rendered . getByText ( 'Pending... ' ) ) . toBeInTheDocument ( )
544
+ expect ( rendered . getByText ( 'pending ' ) ) . toBeInTheDocument ( )
536
545
await act ( ( ) => vi . advanceTimersByTimeAsync ( 10 ) )
537
546
expect ( rendered . getByText ( 'data1' ) ) . toBeInTheDocument ( )
538
547
} )
@@ -547,11 +556,11 @@ describe('useSuspenseQueries 2', () => {
547
556
function Page ( ) {
548
557
useSuspenseQuery ( {
549
558
queryKey : key ,
550
- queryFn : async ( ) => {
551
- count ++
552
- await sleep ( 10 )
553
- return Promise . reject ( new Error ( 'Query failed' ) )
554
- } ,
559
+ queryFn : ( ) =>
560
+ sleep ( 10 ) . then ( ( ) => {
561
+ count ++
562
+ throw new Error ( 'Query failed' )
563
+ } ) ,
555
564
gcTime : 0 ,
556
565
retry : false ,
557
566
} )
@@ -575,9 +584,12 @@ describe('useSuspenseQueries 2', () => {
575
584
576
585
const rendered = renderWithClient ( queryClient , < App /> )
577
586
587
+ expect ( rendered . getByText ( 'loading' ) ) . toBeInTheDocument ( )
578
588
await act ( ( ) => vi . advanceTimersByTimeAsync ( 10 ) )
579
589
expect ( rendered . getByText ( 'There was an error!' ) ) . toBeInTheDocument ( )
590
+
580
591
expect ( count ) . toBe ( 1 )
592
+
581
593
consoleMock . mockRestore ( )
582
594
} )
583
595
@@ -604,7 +616,7 @@ describe('useSuspenseQueries 2', () => {
604
616
function Component ( ) {
605
617
const { data } = useSuspenseQuery ( {
606
618
queryKey : key ,
607
- queryFn : async ( ) => sleep ( 3000 ) . then ( ( ) => 'data' ) ,
619
+ queryFn : ( ) => sleep ( 3000 ) . then ( ( ) => 'data' ) ,
608
620
gcTime : 1000 ,
609
621
} )
610
622
@@ -617,6 +629,7 @@ describe('useSuspenseQueries 2', () => {
617
629
618
630
function App ( ) {
619
631
const [ show , setShow ] = React . useState ( true )
632
+
620
633
return (
621
634
< div >
622
635
{ show ? < Page /> : < Page2 /> }
@@ -628,6 +641,7 @@ describe('useSuspenseQueries 2', () => {
628
641
const rendered = renderWithClient ( queryClient , < App /> )
629
642
630
643
expect ( rendered . getByText ( 'loading' ) ) . toBeInTheDocument ( )
644
+
631
645
fireEvent . click ( rendered . getByText ( 'hide' ) )
632
646
expect ( rendered . getByText ( 'page2' ) ) . toBeInTheDocument ( )
633
647
// wait for query to be resolved
@@ -661,7 +675,7 @@ describe('useSuspenseQueries 2', () => {
661
675
662
676
function App ( ) {
663
677
return (
664
- < React . Suspense fallback = "Loading... " >
678
+ < React . Suspense fallback = "loading " >
665
679
< Page />
666
680
</ React . Suspense >
667
681
)
@@ -699,7 +713,7 @@ describe('useSuspenseQueries 2', () => {
699
713
700
714
renderWithClient (
701
715
queryClient ,
702
- < React . Suspense fallback = "Loading... " >
716
+ < React . Suspense fallback = "loading " >
703
717
< Page />
704
718
</ React . Suspense > ,
705
719
)
@@ -735,7 +749,7 @@ describe('useSuspenseQueries 2', () => {
735
749
736
750
renderWithClient (
737
751
queryClient ,
738
- < React . Suspense fallback = "Loading... " >
752
+ < React . Suspense fallback = "loading " >
739
753
< Page />
740
754
</ React . Suspense > ,
741
755
)
0 commit comments