1
- import { describe , expect , it , vi } from 'vitest'
2
- import { fireEvent , waitFor } from '@testing-library/react'
1
+ import { afterEach , beforeEach , describe , expect , it , vi } from 'vitest'
2
+ import { act , fireEvent } from '@testing-library/react'
3
3
import { ErrorBoundary } from 'react-error-boundary'
4
4
import * as React from 'react'
5
5
import { queryKey , sleep } from '@tanstack/query-test-utils'
@@ -15,6 +15,14 @@ import {
15
15
import { renderWithClient } from './utils'
16
16
17
17
describe ( 'QueryErrorResetBoundary' , ( ) => {
18
+ beforeEach ( ( ) => {
19
+ vi . useFakeTimers ( )
20
+ } )
21
+
22
+ afterEach ( ( ) => {
23
+ vi . useRealTimers ( )
24
+ } )
25
+
18
26
const queryCache = new QueryCache ( )
19
27
const queryClient = new QueryClient ( { queryCache } )
20
28
@@ -69,17 +77,13 @@ describe('QueryErrorResetBoundary', () => {
69
77
</ QueryErrorResetBoundary > ,
70
78
)
71
79
72
- await waitFor ( ( ) =>
73
- expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
74
- )
75
- await waitFor ( ( ) =>
76
- expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( ) ,
77
- )
80
+ await vi . advanceTimersByTimeAsync ( 11 )
81
+ expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( )
82
+ expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( )
78
83
succeed = true
79
84
fireEvent . click ( rendered . getByText ( 'retry' ) )
80
- await waitFor ( ( ) =>
81
- expect ( rendered . getByText ( 'data' ) ) . toBeInTheDocument ( ) ,
82
- )
85
+ await vi . advanceTimersByTimeAsync ( 11 )
86
+ expect ( rendered . getByText ( 'data' ) ) . toBeInTheDocument ( )
83
87
consoleMock . mockRestore ( )
84
88
} )
85
89
@@ -139,17 +143,13 @@ describe('QueryErrorResetBoundary', () => {
139
143
</ QueryErrorResetBoundary > ,
140
144
)
141
145
142
- await waitFor ( ( ) =>
143
- expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
144
- )
145
- await waitFor ( ( ) =>
146
- expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( ) ,
147
- )
146
+ await vi . advanceTimersByTimeAsync ( 11 )
147
+ expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( )
148
+ expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( )
148
149
succeed = true
149
150
fireEvent . click ( rendered . getByText ( 'retry' ) )
150
- await waitFor ( ( ) =>
151
- expect ( rendered . getByText ( 'status: error' ) ) . toBeInTheDocument ( ) ,
152
- )
151
+ await vi . advanceTimersByTimeAsync ( 11 )
152
+ expect ( rendered . getByText ( 'status: error' ) ) . toBeInTheDocument ( )
153
153
consoleMock . mockRestore ( )
154
154
} )
155
155
@@ -211,17 +211,13 @@ describe('QueryErrorResetBoundary', () => {
211
211
</ QueryErrorResetBoundary > ,
212
212
)
213
213
214
- await waitFor ( ( ) =>
215
- expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
216
- )
217
- await waitFor ( ( ) =>
218
- expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( ) ,
219
- )
214
+ await vi . advanceTimersByTimeAsync ( 11 )
215
+ expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( )
216
+ expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( )
220
217
succeed = true
221
218
fireEvent . click ( rendered . getByText ( 'retry' ) )
222
- await waitFor ( ( ) =>
223
- expect ( rendered . getByText ( 'data' ) ) . toBeInTheDocument ( ) ,
224
- )
219
+ await vi . advanceTimersByTimeAsync ( 11 )
220
+ expect ( rendered . getByText ( 'data' ) ) . toBeInTheDocument ( )
225
221
consoleMock . mockRestore ( )
226
222
} )
227
223
@@ -277,15 +273,12 @@ describe('QueryErrorResetBoundary', () => {
277
273
</ QueryErrorResetBoundary > ,
278
274
)
279
275
280
- await waitFor ( ( ) =>
281
- expect (
282
- rendered . getByText ( 'status: pending, fetchStatus: idle' ) ,
283
- ) . toBeInTheDocument ( ) ,
284
- )
276
+ expect (
277
+ rendered . getByText ( 'status: pending, fetchStatus: idle' ) ,
278
+ ) . toBeInTheDocument ( )
285
279
fireEvent . click ( rendered . getByRole ( 'button' , { name : / r e f e t c h / i } ) )
286
- await waitFor ( ( ) =>
287
- expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
288
- )
280
+ await vi . advanceTimersByTimeAsync ( 0 )
281
+ expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( )
289
282
consoleMock . mockRestore ( )
290
283
} )
291
284
@@ -339,17 +332,13 @@ describe('QueryErrorResetBoundary', () => {
339
332
</ QueryErrorResetBoundary > ,
340
333
)
341
334
342
- await waitFor ( ( ) =>
343
- expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
344
- )
345
- await waitFor ( ( ) =>
346
- expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( ) ,
347
- )
335
+ await vi . advanceTimersByTimeAsync ( 11 )
336
+ expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( )
337
+ expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( )
348
338
succeed = true
349
339
fireEvent . click ( rendered . getByText ( 'retry' ) )
350
- await waitFor ( ( ) =>
351
- expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
352
- )
340
+ await vi . advanceTimersByTimeAsync ( 11 )
341
+ expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( )
353
342
consoleMock . mockRestore ( )
354
343
} )
355
344
@@ -405,17 +394,13 @@ describe('QueryErrorResetBoundary', () => {
405
394
</ QueryErrorResetBoundary > ,
406
395
)
407
396
408
- await waitFor ( ( ) =>
409
- expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
410
- )
411
- await waitFor ( ( ) =>
412
- expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( ) ,
413
- )
397
+ await vi . advanceTimersByTimeAsync ( 11 )
398
+ expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( )
399
+ expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( )
414
400
succeed = true
415
401
fireEvent . click ( rendered . getByText ( 'retry' ) )
416
- await waitFor ( ( ) =>
417
- expect ( rendered . getByText ( 'data' ) ) . toBeInTheDocument ( ) ,
418
- )
402
+ await vi . advanceTimersByTimeAsync ( 11 )
403
+ expect ( rendered . getByText ( 'data' ) ) . toBeInTheDocument ( )
419
404
consoleMock . mockRestore ( )
420
405
} )
421
406
@@ -475,21 +460,18 @@ describe('QueryErrorResetBoundary', () => {
475
460
</ QueryErrorResetBoundary > ,
476
461
)
477
462
478
- await waitFor ( ( ) =>
479
- expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
480
- )
481
- await waitFor ( ( ) =>
482
- expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( ) ,
483
- )
463
+ await vi . advanceTimersByTimeAsync ( 11 )
464
+ expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( )
465
+ expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( )
484
466
shouldReset = true
485
467
fireEvent . click ( rendered . getByText ( 'retry' ) )
486
- await waitFor ( ( ) =>
487
- expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
488
- )
468
+ await vi . advanceTimersByTimeAsync ( 11 )
469
+ expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( )
489
470
succeed = true
490
471
shouldReset = false
491
472
fireEvent . click ( rendered . getByText ( 'retry' ) )
492
- await waitFor ( ( ) => rendered . getByText ( 'error boundary' ) )
473
+ await vi . advanceTimersByTimeAsync ( 11 )
474
+ rendered . getByText ( 'error boundary' )
493
475
consoleMock . mockRestore ( )
494
476
} )
495
477
@@ -540,13 +522,16 @@ describe('QueryErrorResetBoundary', () => {
540
522
</ QueryErrorResetBoundary > ,
541
523
)
542
524
543
- await waitFor ( ( ) => rendered . getByText ( 'error boundary' ) )
544
- await waitFor ( ( ) => rendered . getByText ( 'retry' ) )
525
+ await vi . advanceTimersByTimeAsync ( 11 )
526
+ rendered . getByText ( 'error boundary' )
527
+ rendered . getByText ( 'retry' )
545
528
fireEvent . click ( rendered . getByText ( 'retry' ) )
546
- await waitFor ( ( ) => rendered . getByText ( 'error boundary' ) )
547
- await waitFor ( ( ) => rendered . getByText ( 'retry' ) )
529
+ await vi . advanceTimersByTimeAsync ( 11 )
530
+ rendered . getByText ( 'error boundary' )
531
+ rendered . getByText ( 'retry' )
548
532
fireEvent . click ( rendered . getByText ( 'retry' ) )
549
- await waitFor ( ( ) => rendered . getByText ( 'error boundary' ) )
533
+ await vi . advanceTimersByTimeAsync ( 11 )
534
+ rendered . getByText ( 'error boundary' )
550
535
expect ( fetchCount ) . toBe ( 3 )
551
536
consoleMock . mockRestore ( )
552
537
} )
@@ -605,13 +590,16 @@ describe('QueryErrorResetBoundary', () => {
605
590
</ QueryErrorResetBoundary > ,
606
591
)
607
592
608
- await waitFor ( ( ) => rendered . getByText ( 'error boundary' ) )
609
- await waitFor ( ( ) => rendered . getByText ( 'retry' ) )
593
+ await act ( ( ) => vi . advanceTimersByTimeAsync ( 11 ) )
594
+ rendered . getByText ( 'error boundary' )
595
+ rendered . getByText ( 'retry' )
610
596
fireEvent . click ( rendered . getByText ( 'retry' ) )
611
- await waitFor ( ( ) => rendered . getByText ( 'error boundary' ) )
612
- await waitFor ( ( ) => rendered . getByText ( 'retry' ) )
597
+ await act ( ( ) => vi . advanceTimersByTimeAsync ( 11 ) )
598
+ rendered . getByText ( 'error boundary' )
599
+ rendered . getByText ( 'retry' )
613
600
fireEvent . click ( rendered . getByText ( 'retry' ) )
614
- await waitFor ( ( ) => rendered . getByText ( 'data' ) )
601
+ await act ( ( ) => vi . advanceTimersByTimeAsync ( 11 ) )
602
+ rendered . getByText ( 'data' )
615
603
expect ( fetchCount ) . toBe ( 3 )
616
604
expect ( renders ) . toBe ( 1 )
617
605
consoleMock . mockRestore ( )
@@ -692,20 +680,17 @@ describe('QueryErrorResetBoundary', () => {
692
680
</ QueryErrorResetBoundary > ,
693
681
)
694
682
695
- await waitFor ( ( ) =>
696
- expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
697
- )
698
- await waitFor ( ( ) =>
699
- expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( ) ,
700
- )
683
+ await vi . advanceTimersByTimeAsync ( 11 )
684
+ expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( )
685
+ expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( )
701
686
succeed = true
702
687
fireEvent . click ( rendered . getByText ( 'retry' ) )
703
- await waitFor ( ( ) =>
704
- expect ( rendered . getByText ( 'data' ) ) . toBeInTheDocument ( ) ,
705
- )
688
+ await vi . advanceTimersByTimeAsync ( 11 )
689
+ expect ( rendered . getByText ( 'data' ) ) . toBeInTheDocument ( )
706
690
consoleMock . mockRestore ( )
707
691
} )
708
692
} )
693
+
709
694
describe ( 'useQueries' , ( ) => {
710
695
it ( 'should retry fetch if the reset error boundary has been reset' , async ( ) => {
711
696
const consoleMock = vi
@@ -762,17 +747,13 @@ describe('QueryErrorResetBoundary', () => {
762
747
</ QueryErrorResetBoundary > ,
763
748
)
764
749
765
- await waitFor ( ( ) =>
766
- expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
767
- )
768
- await waitFor ( ( ) =>
769
- expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( ) ,
770
- )
750
+ await vi . advanceTimersByTimeAsync ( 11 )
751
+ expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( )
752
+ expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( )
771
753
succeed = true
772
754
fireEvent . click ( rendered . getByText ( 'retry' ) )
773
- await waitFor ( ( ) =>
774
- expect ( rendered . getByText ( 'data' ) ) . toBeInTheDocument ( ) ,
775
- )
755
+ await vi . advanceTimersByTimeAsync ( 11 )
756
+ expect ( rendered . getByText ( 'data' ) ) . toBeInTheDocument ( )
776
757
consoleMock . mockRestore ( )
777
758
} )
778
759
@@ -832,17 +813,13 @@ describe('QueryErrorResetBoundary', () => {
832
813
</ QueryErrorResetBoundary > ,
833
814
)
834
815
835
- await waitFor ( ( ) =>
836
- expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
837
- )
838
- await waitFor ( ( ) =>
839
- expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( ) ,
840
- )
816
+ await act ( ( ) => vi . advanceTimersByTimeAsync ( 11 ) )
817
+ expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( )
818
+ expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( )
841
819
succeed = true
842
820
fireEvent . click ( rendered . getByText ( 'retry' ) )
843
- await waitFor ( ( ) =>
844
- expect ( rendered . getByText ( 'data' ) ) . toBeInTheDocument ( ) ,
845
- )
821
+ await act ( ( ) => vi . advanceTimersByTimeAsync ( 11 ) )
822
+ expect ( rendered . getByText ( 'data' ) ) . toBeInTheDocument ( )
846
823
consoleMock . mockRestore ( )
847
824
} )
848
825
} )
0 commit comments