1
- import { describe , expect , it , vi } from 'vitest'
2
- import { fireEvent , render , waitFor } from '@solidjs/testing-library'
1
+ import { afterEach , beforeEach , describe , expect , it , vi } from 'vitest'
2
+ import { fireEvent , render } from '@solidjs/testing-library'
3
3
import {
4
4
ErrorBoundary ,
5
5
Show ,
@@ -19,6 +19,14 @@ import {
19
19
import type { InfiniteData , UseInfiniteQueryResult , UseQueryResult } from '..'
20
20
21
21
describe ( "useQuery's in Suspense mode" , ( ) => {
22
+ beforeEach ( ( ) => {
23
+ vi . useFakeTimers ( )
24
+ } )
25
+
26
+ afterEach ( ( ) => {
27
+ vi . useRealTimers ( )
28
+ } )
29
+
22
30
const queryCache = new QueryCache ( )
23
31
const queryClient = new QueryClient ( { queryCache } )
24
32
@@ -67,10 +75,10 @@ describe("useQuery's in Suspense mode", () => {
67
75
</ QueryClientProvider >
68
76
) )
69
77
70
- await waitFor ( ( ) => rendered . getByText ( 'data: 1' ) )
78
+ await vi . waitFor ( ( ) => rendered . getByText ( 'data: 1' ) )
71
79
fireEvent . click ( rendered . getByLabelText ( 'toggle' ) )
72
80
73
- await waitFor ( ( ) => rendered . getByText ( 'data: 2' ) )
81
+ await vi . waitFor ( ( ) => rendered . getByText ( 'data: 2' ) )
74
82
75
83
expect ( renders ) . toBe ( 4 )
76
84
expect ( states . length ) . toBe ( 4 )
@@ -115,7 +123,7 @@ describe("useQuery's in Suspense mode", () => {
115
123
</ QueryClientProvider >
116
124
) )
117
125
118
- await waitFor ( ( ) => rendered . getByText ( 'data: 1' ) )
126
+ await vi . waitFor ( ( ) => rendered . getByText ( 'data: 1' ) )
119
127
120
128
// eslint-disable-next-line cspell/spellchecker
121
129
// TODO(lukemurray): in react this is 1 in solid this is 2 because suspense
@@ -127,7 +135,7 @@ describe("useQuery's in Suspense mode", () => {
127
135
} )
128
136
129
137
fireEvent . click ( rendered . getByText ( 'next' ) )
130
- await waitFor ( ( ) => rendered . getByText ( 'data: 2' ) )
138
+ await vi . waitFor ( ( ) => rendered . getByText ( 'data: 2' ) )
131
139
132
140
// eslint-disable-next-line cspell/spellchecker
133
141
// TODO(lukemurray): in react this is 2 and in solid it is 4
@@ -161,7 +169,7 @@ describe("useQuery's in Suspense mode", () => {
161
169
</ QueryClientProvider >
162
170
) )
163
171
164
- await waitFor ( ( ) => rendered . getByText ( 'rendered' ) )
172
+ await vi . waitFor ( ( ) => rendered . getByText ( 'rendered' ) )
165
173
166
174
expect ( queryFn ) . toHaveBeenCalledTimes ( 1 )
167
175
} )
@@ -205,7 +213,7 @@ describe("useQuery's in Suspense mode", () => {
205
213
expect ( queryCache . find ( { queryKey : key } ) ) . toBeFalsy ( )
206
214
207
215
fireEvent . click ( rendered . getByLabelText ( 'toggle' ) )
208
- await waitFor ( ( ) => rendered . getByText ( 'rendered' ) )
216
+ await vi . waitFor ( ( ) => rendered . getByText ( 'rendered' ) )
209
217
210
218
expect ( queryCache . find ( { queryKey : key } ) ?. getObserversCount ( ) ) . toBe ( 1 )
211
219
@@ -268,19 +276,21 @@ describe("useQuery's in Suspense mode", () => {
268
276
</ QueryClientProvider >
269
277
) )
270
278
271
- await waitFor ( ( ) =>
279
+ await vi . waitFor ( ( ) =>
272
280
expect ( rendered . getByText ( 'Loading...' ) ) . toBeInTheDocument ( ) ,
273
281
)
274
282
275
- await waitFor ( ( ) =>
283
+ await vi . waitFor ( ( ) =>
276
284
expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
277
285
)
278
286
279
- await waitFor ( ( ) => expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( ) )
287
+ await vi . waitFor ( ( ) =>
288
+ expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( ) ,
289
+ )
280
290
281
291
fireEvent . click ( rendered . getByText ( 'retry' ) )
282
292
283
- await waitFor ( ( ) =>
293
+ await vi . waitFor ( ( ) =>
284
294
expect ( rendered . getByText ( 'rendered' ) ) . toBeInTheDocument ( ) ,
285
295
)
286
296
} )
@@ -336,21 +346,25 @@ describe("useQuery's in Suspense mode", () => {
336
346
</ QueryClientProvider >
337
347
) )
338
348
339
- await waitFor ( ( ) =>
349
+ await vi . waitFor ( ( ) =>
340
350
expect ( rendered . getByText ( 'Loading...' ) ) . toBeInTheDocument ( ) ,
341
351
)
342
- await waitFor ( ( ) =>
352
+ await vi . waitFor ( ( ) =>
343
353
expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
344
354
)
345
- await waitFor ( ( ) => expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( ) )
355
+ await vi . waitFor ( ( ) =>
356
+ expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( ) ,
357
+ )
346
358
fireEvent . click ( rendered . getByText ( 'retry' ) )
347
- await waitFor ( ( ) =>
359
+ await vi . waitFor ( ( ) =>
348
360
expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
349
361
)
350
- await waitFor ( ( ) => expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( ) )
362
+ await vi . waitFor ( ( ) =>
363
+ expect ( rendered . getByText ( 'retry' ) ) . toBeInTheDocument ( ) ,
364
+ )
351
365
succeed = true
352
366
fireEvent . click ( rendered . getByText ( 'retry' ) )
353
- await waitFor ( ( ) =>
367
+ await vi . waitFor ( ( ) =>
354
368
expect ( rendered . getByText ( 'rendered' ) ) . toBeInTheDocument ( ) ,
355
369
)
356
370
} )
@@ -402,26 +416,30 @@ describe("useQuery's in Suspense mode", () => {
402
416
</ QueryClientProvider >
403
417
) )
404
418
405
- await waitFor ( ( ) =>
419
+ await vi . waitFor ( ( ) =>
406
420
expect ( rendered . getByText ( 'Loading...' ) ) . toBeInTheDocument ( ) ,
407
421
)
408
- await waitFor ( ( ) =>
422
+ await vi . waitFor ( ( ) =>
409
423
expect ( rendered . getByText ( 'data: 1' ) ) . toBeInTheDocument ( ) ,
410
424
)
411
- await waitFor ( ( ) =>
425
+ await vi . waitFor ( ( ) =>
412
426
expect ( rendered . getByText ( 'fetching: false' ) ) . toBeInTheDocument ( ) ,
413
427
)
414
- await waitFor ( ( ) => expect ( rendered . getByText ( 'hide' ) ) . toBeInTheDocument ( ) )
428
+ await vi . waitFor ( ( ) =>
429
+ expect ( rendered . getByText ( 'hide' ) ) . toBeInTheDocument ( ) ,
430
+ )
415
431
fireEvent . click ( rendered . getByText ( 'hide' ) )
416
- await waitFor ( ( ) => expect ( rendered . getByText ( 'show' ) ) . toBeInTheDocument ( ) )
432
+ await vi . waitFor ( ( ) =>
433
+ expect ( rendered . getByText ( 'show' ) ) . toBeInTheDocument ( ) ,
434
+ )
417
435
fireEvent . click ( rendered . getByText ( 'show' ) )
418
- await waitFor ( ( ) =>
436
+ await vi . waitFor ( ( ) =>
419
437
expect ( rendered . getByText ( 'fetching: true' ) ) . toBeInTheDocument ( ) ,
420
438
)
421
- await waitFor ( ( ) =>
439
+ await vi . waitFor ( ( ) =>
422
440
expect ( rendered . getByText ( 'data: 2' ) ) . toBeInTheDocument ( ) ,
423
441
)
424
- await waitFor ( ( ) =>
442
+ await vi . waitFor ( ( ) =>
425
443
expect ( rendered . getByText ( 'fetching: false' ) ) . toBeInTheDocument ( ) ,
426
444
)
427
445
} )
@@ -467,17 +485,17 @@ describe("useQuery's in Suspense mode", () => {
467
485
</ QueryClientProvider >
468
486
) )
469
487
470
- await waitFor ( ( ) =>
488
+ await vi . waitFor ( ( ) =>
471
489
expect ( rendered . getByText ( 'Loading...' ) ) . toBeInTheDocument ( ) ,
472
490
)
473
- await waitFor ( ( ) =>
491
+ await vi . waitFor ( ( ) =>
474
492
expect ( rendered . getByText ( `data: ${ key1 } ` ) ) . toBeInTheDocument ( ) ,
475
493
)
476
494
fireEvent . click ( rendered . getByText ( 'switch' ) )
477
- await waitFor ( ( ) =>
495
+ await vi . waitFor ( ( ) =>
478
496
expect ( rendered . getByText ( 'Loading...' ) ) . toBeInTheDocument ( ) ,
479
497
)
480
- await waitFor ( ( ) =>
498
+ await vi . waitFor ( ( ) =>
481
499
expect ( rendered . getByText ( `data: ${ key2 } ` ) ) . toBeInTheDocument ( ) ,
482
500
)
483
501
} )
@@ -530,10 +548,10 @@ describe("useQuery's in Suspense mode", () => {
530
548
</ QueryClientProvider >
531
549
) )
532
550
533
- await waitFor ( ( ) =>
551
+ await vi . waitFor ( ( ) =>
534
552
expect ( rendered . getByText ( 'Loading...' ) ) . toBeInTheDocument ( ) ,
535
553
)
536
- await waitFor ( ( ) =>
554
+ await vi . waitFor ( ( ) =>
537
555
expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
538
556
)
539
557
@@ -584,10 +602,10 @@ describe("useQuery's in Suspense mode", () => {
584
602
</ QueryClientProvider >
585
603
) )
586
604
587
- await waitFor ( ( ) =>
605
+ await vi . waitFor ( ( ) =>
588
606
expect ( rendered . getByText ( 'Loading...' ) ) . toBeInTheDocument ( ) ,
589
607
)
590
- await waitFor ( ( ) =>
608
+ await vi . waitFor ( ( ) =>
591
609
expect ( rendered . getByText ( 'rendered' ) ) . toBeInTheDocument ( ) ,
592
610
)
593
611
} )
@@ -640,10 +658,10 @@ describe("useQuery's in Suspense mode", () => {
640
658
</ QueryClientProvider >
641
659
) )
642
660
643
- await waitFor ( ( ) =>
661
+ await vi . waitFor ( ( ) =>
644
662
expect ( rendered . getByText ( 'Loading...' ) ) . toBeInTheDocument ( ) ,
645
663
)
646
- await waitFor ( ( ) =>
664
+ await vi . waitFor ( ( ) =>
647
665
expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
648
666
)
649
667
@@ -696,10 +714,10 @@ describe("useQuery's in Suspense mode", () => {
696
714
</ QueryClientProvider >
697
715
) )
698
716
699
- await waitFor ( ( ) =>
717
+ await vi . waitFor ( ( ) =>
700
718
expect ( rendered . getByText ( 'Loading...' ) ) . toBeInTheDocument ( ) ,
701
719
)
702
- await waitFor ( ( ) =>
720
+ await vi . waitFor ( ( ) =>
703
721
expect ( rendered . getByText ( 'rendered' ) ) . toBeInTheDocument ( ) ,
704
722
)
705
723
} )
@@ -739,10 +757,10 @@ describe("useQuery's in Suspense mode", () => {
739
757
) )
740
758
741
759
expect ( queryFn ) . toHaveBeenCalledTimes ( 0 )
742
- await sleep ( 5 )
760
+ await vi . advanceTimersByTimeAsync ( 5 )
743
761
fireEvent . click ( rendered . getByRole ( 'button' , { name : / f i r e / i } ) )
744
762
745
- await waitFor ( ( ) => {
763
+ await vi . waitFor ( ( ) => {
746
764
expect ( rendered . getByRole ( 'heading' ) . textContent ) . toBe ( '23' )
747
765
} )
748
766
@@ -806,11 +824,11 @@ describe("useQuery's in Suspense mode", () => {
806
824
) )
807
825
808
826
// render suspense fallback (Loading...)
809
- await waitFor ( ( ) =>
827
+ await vi . waitFor ( ( ) =>
810
828
expect ( rendered . getByText ( 'Loading...' ) ) . toBeInTheDocument ( ) ,
811
829
)
812
830
// resolve promise -> render Page (rendered)
813
- await waitFor ( ( ) =>
831
+ await vi . waitFor ( ( ) =>
814
832
expect ( rendered . getByText ( 'rendered' ) ) . toBeInTheDocument ( ) ,
815
833
)
816
834
@@ -819,7 +837,7 @@ describe("useQuery's in Suspense mode", () => {
819
837
// reset query -> and throw error
820
838
fireEvent . click ( rendered . getByLabelText ( 'fail' ) )
821
839
// render error boundary fallback (error boundary)
822
- await waitFor ( ( ) =>
840
+ await vi . waitFor ( ( ) =>
823
841
expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
824
842
)
825
843
@@ -876,11 +894,11 @@ describe("useQuery's in Suspense mode", () => {
876
894
) )
877
895
878
896
// render suspense fallback (Loading...)
879
- await waitFor ( ( ) =>
897
+ await vi . waitFor ( ( ) =>
880
898
expect ( rendered . getByText ( 'Loading...' ) ) . toBeInTheDocument ( ) ,
881
899
)
882
900
// resolve promise -> render Page (rendered)
883
- await waitFor ( ( ) =>
901
+ await vi . waitFor ( ( ) =>
884
902
expect ( rendered . getByText ( 'rendered' ) ) . toBeInTheDocument ( ) ,
885
903
)
886
904
@@ -889,7 +907,7 @@ describe("useQuery's in Suspense mode", () => {
889
907
// change query key
890
908
fireEvent . click ( rendered . getByLabelText ( 'fail' ) )
891
909
// render error boundary fallback (error boundary)
892
- await waitFor ( ( ) =>
910
+ await vi . waitFor ( ( ) =>
893
911
expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
894
912
)
895
913
@@ -948,20 +966,20 @@ describe("useQuery's in Suspense mode", () => {
948
966
) )
949
967
950
968
// render empty data with 'rendered' when enabled is false
951
- await waitFor ( ( ) =>
969
+ await vi . waitFor ( ( ) =>
952
970
expect ( rendered . getByText ( 'rendered' ) ) . toBeInTheDocument ( ) ,
953
971
)
954
972
955
973
// change enabled to true
956
974
fireEvent . click ( rendered . getByLabelText ( 'fail' ) )
957
975
958
976
// render pending fallback
959
- await waitFor ( ( ) =>
977
+ await vi . waitFor ( ( ) =>
960
978
expect ( rendered . getByText ( 'Loading...' ) ) . toBeInTheDocument ( ) ,
961
979
)
962
980
963
981
// render error boundary fallback (error boundary)
964
- await waitFor ( ( ) =>
982
+ await vi . waitFor ( ( ) =>
965
983
expect ( rendered . getByText ( 'error boundary' ) ) . toBeInTheDocument ( ) ,
966
984
)
967
985
@@ -1007,7 +1025,7 @@ describe("useQuery's in Suspense mode", () => {
1007
1025
</ QueryClientProvider >
1008
1026
) )
1009
1027
1010
- await waitFor ( ( ) =>
1028
+ await vi . waitFor ( ( ) =>
1011
1029
expect ( state ) . toMatchObject ( {
1012
1030
data : 1 ,
1013
1031
status : 'success' ,
0 commit comments