7
7
test ,
8
8
vi ,
9
9
} from 'vitest'
10
- import { waitFor } from '@testing-library/dom'
11
10
import { QueryObserver , focusManager } from '..'
12
11
import { createQueryClient , queryKey , sleep } from './utils'
13
12
import type { QueryClient , QueryObserverResult } from '..'
@@ -16,6 +15,7 @@ describe('queryObserver', () => {
16
15
let queryClient : QueryClient
17
16
18
17
beforeEach ( ( ) => {
18
+ vi . useFakeTimers ( )
19
19
queryClient = createQueryClient ( {
20
20
defaultOptions : {
21
21
queries : {
@@ -28,6 +28,7 @@ describe('queryObserver', () => {
28
28
29
29
afterEach ( ( ) => {
30
30
queryClient . clear ( )
31
+ vi . useRealTimers ( )
31
32
} )
32
33
33
34
test ( 'should trigger a fetch when subscribed' , async ( ) => {
@@ -37,7 +38,6 @@ describe('queryObserver', () => {
37
38
. mockReturnValue ( 'data' )
38
39
const observer = new QueryObserver ( queryClient , { queryKey : key , queryFn } )
39
40
const unsubscribe = observer . subscribe ( ( ) => undefined )
40
- await sleep ( 1 )
41
41
unsubscribe ( )
42
42
expect ( queryFn ) . toHaveBeenCalledTimes ( 1 )
43
43
} )
@@ -109,7 +109,7 @@ describe('queryObserver', () => {
109
109
fetchStatus : 'idle' ,
110
110
data : undefined ,
111
111
} )
112
- await waitFor ( ( ) => expect ( count ) . toBe ( 0 ) )
112
+ await vi . waitFor ( ( ) => expect ( count ) . toBe ( 0 ) )
113
113
114
114
unsubscribe ( )
115
115
} )
@@ -128,7 +128,7 @@ describe('queryObserver', () => {
128
128
data : undefined ,
129
129
} )
130
130
131
- await waitFor ( ( ) => expect ( count ) . toBe ( 1 ) )
131
+ await vi . waitFor ( ( ) => expect ( count ) . toBe ( 1 ) )
132
132
expect ( observer . getCurrentResult ( ) ) . toMatchObject ( {
133
133
status : 'success' ,
134
134
fetchStatus : 'idle' ,
@@ -158,7 +158,7 @@ describe('queryObserver', () => {
158
158
data : undefined ,
159
159
} )
160
160
161
- await waitFor ( ( ) => expect ( count ) . toBe ( 1 ) )
161
+ await vi . waitFor ( ( ) => expect ( count ) . toBe ( 1 ) )
162
162
163
163
unsubscribe ( )
164
164
} )
@@ -194,7 +194,7 @@ describe('queryObserver', () => {
194
194
fetchStatus : 'fetching' ,
195
195
data : undefined ,
196
196
} )
197
- await waitFor ( ( ) => expect ( count ) . toBe ( 1 ) )
197
+ await vi . waitFor ( ( ) => expect ( count ) . toBe ( 1 ) )
198
198
199
199
unsubscribe ( )
200
200
} )
@@ -208,20 +208,20 @@ describe('queryObserver', () => {
208
208
queryClient . invalidateQueries ( { queryKey : key , refetchType : 'inactive' } )
209
209
210
210
// should not refetch since it was active and we only refetch inactive
211
- await waitFor ( ( ) => expect ( count ) . toBe ( 0 ) )
211
+ await vi . waitFor ( ( ) => expect ( count ) . toBe ( 0 ) )
212
212
213
213
queryClient . invalidateQueries ( { queryKey : key , refetchType : 'active' } )
214
214
215
215
// should refetch since it was active and we refetch active
216
- await waitFor ( ( ) => expect ( count ) . toBe ( 1 ) )
216
+ await vi . waitFor ( ( ) => expect ( count ) . toBe ( 1 ) )
217
217
218
218
// Toggle enabled
219
219
enabled = false
220
220
221
221
// should not refetch since it is not active and we only refetch active
222
222
queryClient . invalidateQueries ( { queryKey : key , refetchType : 'active' } )
223
223
224
- await waitFor ( ( ) => expect ( count ) . toBe ( 1 ) )
224
+ await vi . waitFor ( ( ) => expect ( count ) . toBe ( 1 ) )
225
225
226
226
unsubscribe ( )
227
227
} )
@@ -251,7 +251,7 @@ describe('queryObserver', () => {
251
251
data : undefined ,
252
252
} )
253
253
254
- await waitFor ( ( ) => expect ( count ) . toBe ( 1 ) )
254
+ await vi . waitFor ( ( ) => expect ( count ) . toBe ( 1 ) )
255
255
256
256
// re-subscribe after data comes in
257
257
unsubscribe = observer . subscribe ( vi . fn ( ) )
@@ -275,9 +275,9 @@ describe('queryObserver', () => {
275
275
const unsubscribe = observer . subscribe ( ( result ) => {
276
276
results . push ( result )
277
277
} )
278
- await sleep ( 1 )
278
+ await vi . advanceTimersByTimeAsync ( 1 )
279
279
observer . setOptions ( { queryKey : key2 , queryFn : ( ) => 2 } )
280
- await sleep ( 1 )
280
+ await vi . advanceTimersByTimeAsync ( 1 )
281
281
unsubscribe ( )
282
282
expect ( results . length ) . toBe ( 4 )
283
283
expect ( results [ 0 ] ) . toMatchObject ( { data : undefined , status : 'pending' } )
@@ -300,7 +300,7 @@ describe('queryObserver', () => {
300
300
> ( )
301
301
observerResult = result
302
302
} )
303
- await sleep ( 1 )
303
+ await vi . advanceTimersByTimeAsync ( 1 )
304
304
unsubscribe ( )
305
305
expect ( observerResult ) . toMatchObject ( { data : { myCount : 1 } } )
306
306
} )
@@ -330,7 +330,7 @@ describe('queryObserver', () => {
330
330
const unsubscribe = observer . subscribe ( ( result ) => {
331
331
observerResult = result
332
332
} )
333
- await sleep ( 1 )
333
+ await vi . advanceTimersByTimeAsync ( 1 )
334
334
unsubscribe ( )
335
335
expect ( observerResult ) . toMatchObject ( { data : { myCount : 1 } } )
336
336
} )
@@ -374,13 +374,13 @@ describe('queryObserver', () => {
374
374
const unsubscribe = observer . subscribe ( ( result ) => {
375
375
results . push ( result )
376
376
} )
377
- await sleep ( 1 )
377
+ await vi . advanceTimersByTimeAsync ( 1 )
378
378
observer . setOptions ( {
379
379
queryKey : key ,
380
380
queryFn,
381
381
select : select2 ,
382
382
} )
383
- await sleep ( 1 )
383
+ await vi . advanceTimersByTimeAsync ( 1 )
384
384
await observer . refetch ( )
385
385
unsubscribe ( )
386
386
expect ( count ) . toBe ( 2 )
@@ -429,13 +429,13 @@ describe('queryObserver', () => {
429
429
const unsubscribe = observer . subscribe ( ( result ) => {
430
430
results . push ( result )
431
431
} )
432
- await sleep ( 1 )
432
+ await vi . advanceTimersByTimeAsync ( 1 )
433
433
observer . setOptions ( {
434
434
queryKey : key ,
435
435
queryFn,
436
436
select,
437
437
} )
438
- await sleep ( 1 )
438
+ await vi . advanceTimersByTimeAsync ( 1 )
439
439
await observer . refetch ( )
440
440
unsubscribe ( )
441
441
expect ( count ) . toBe ( 1 )
@@ -497,8 +497,9 @@ describe('queryObserver', () => {
497
497
const unsubscribe = observer . subscribe ( ( result ) => {
498
498
results . push ( result )
499
499
} )
500
- await sleep ( 50 )
501
- await observer . refetch ( )
500
+ await vi . advanceTimersByTimeAsync ( 50 )
501
+ observer . refetch ( )
502
+ await vi . advanceTimersByTimeAsync ( 10 )
502
503
unsubscribe ( )
503
504
expect ( results [ 0 ] ) . toMatchObject ( {
504
505
status : 'pending' ,
@@ -546,8 +547,9 @@ describe('queryObserver', () => {
546
547
const unsubscribe = observer . subscribe ( ( result ) => {
547
548
results . push ( result )
548
549
} )
549
- await sleep ( 50 )
550
- await observer . refetch ( )
550
+ await vi . advanceTimersByTimeAsync ( 50 )
551
+ observer . refetch ( )
552
+ await vi . advanceTimersByTimeAsync ( 10 )
551
553
unsubscribe ( )
552
554
553
555
expect ( results [ 0 ] ) . toMatchObject ( {
@@ -601,7 +603,7 @@ describe('queryObserver', () => {
601
603
enabled : false ,
602
604
} )
603
605
const unsubscribe = observer . subscribe ( ( ) => undefined )
604
- await sleep ( 1 )
606
+ await vi . advanceTimersByTimeAsync ( 1 )
605
607
unsubscribe ( )
606
608
expect ( queryFn ) . toHaveBeenCalledTimes ( 0 )
607
609
} )
@@ -617,7 +619,7 @@ describe('queryObserver', () => {
617
619
enabled : ( ) => false ,
618
620
} )
619
621
const unsubscribe = observer . subscribe ( ( ) => undefined )
620
- await sleep ( 1 )
622
+ await vi . advanceTimersByTimeAsync ( 1 )
621
623
unsubscribe ( )
622
624
expect ( queryFn ) . toHaveBeenCalledTimes ( 0 )
623
625
} )
@@ -628,7 +630,7 @@ describe('queryObserver', () => {
628
630
. fn < ( ...args : Array < unknown > ) => string > ( )
629
631
. mockReturnValue ( 'data' )
630
632
new QueryObserver ( queryClient , { queryKey : key , queryFn } )
631
- await sleep ( 1 )
633
+ await vi . advanceTimersByTimeAsync ( 1 )
632
634
expect ( queryFn ) . toHaveBeenCalledTimes ( 0 )
633
635
} )
634
636
@@ -664,7 +666,7 @@ describe('queryObserver', () => {
664
666
} )
665
667
observer . setOptions ( { queryKey : key , enabled : false , staleTime : 10 } )
666
668
await queryClient . fetchQuery ( { queryKey : key , queryFn } )
667
- await sleep ( 20 )
669
+ await vi . advanceTimersByTimeAsync ( 20 )
668
670
unsubscribe ( )
669
671
expect ( queryFn ) . toHaveBeenCalledTimes ( 1 )
670
672
expect ( results . length ) . toBe ( 2 )
@@ -690,7 +692,7 @@ describe('queryObserver', () => {
690
692
results2 . push ( x )
691
693
} )
692
694
await queryClient . fetchQuery ( { queryKey : key , queryFn } )
693
- await sleep ( 50 )
695
+ await vi . advanceTimersByTimeAsync ( 50 )
694
696
unsubscribe1 ( )
695
697
unsubscribe2 ( )
696
698
expect ( queryFn ) . toHaveBeenCalledTimes ( 1 )
@@ -715,9 +717,9 @@ describe('queryObserver', () => {
715
717
retryDelay : 50 ,
716
718
} )
717
719
const unsubscribe = observer . subscribe ( ( ) => undefined )
718
- await sleep ( 70 )
720
+ await vi . advanceTimersByTimeAsync ( 70 )
719
721
unsubscribe ( )
720
- await sleep ( 200 )
722
+ await vi . advanceTimersByTimeAsync ( 200 )
721
723
expect ( count ) . toBe ( 2 )
722
724
} )
723
725
@@ -737,10 +739,10 @@ describe('queryObserver', () => {
737
739
} )
738
740
const unsubscribe = observer . subscribe ( ( ) => undefined )
739
741
expect ( count ) . toBe ( 1 )
740
- await sleep ( 15 )
742
+ await vi . advanceTimersByTimeAsync ( 15 )
741
743
expect ( count ) . toBe ( 2 )
742
744
unsubscribe ( )
743
- await sleep ( 10 )
745
+ await vi . advanceTimersByTimeAsync ( 10 )
744
746
expect ( queryClient . getQueryCache ( ) . find ( { queryKey : key } ) ) . toBeUndefined ( )
745
747
expect ( count ) . toBe ( 2 )
746
748
} )
@@ -764,7 +766,7 @@ describe('queryObserver', () => {
764
766
results . push ( x )
765
767
} )
766
768
767
- await sleep ( 10 )
769
+ await vi . advanceTimersByTimeAsync ( 10 )
768
770
unsubscribe ( )
769
771
770
772
expect ( results . length ) . toBe ( 2 )
@@ -849,7 +851,7 @@ describe('queryObserver', () => {
849
851
} )
850
852
851
853
const unsubscribe = observer . subscribe ( ( ) => undefined )
852
- await sleep ( 30 )
854
+ await vi . advanceTimersByTimeAsync ( 30 )
853
855
854
856
expect ( queryFn ) . toHaveBeenCalledTimes ( 1 )
855
857
@@ -872,7 +874,7 @@ describe('queryObserver', () => {
872
874
873
875
const unsubscribe = observer . subscribe ( ( ) => undefined )
874
876
875
- await sleep ( 10 )
877
+ await vi . advanceTimersByTimeAsync ( 10 )
876
878
expect ( observer . getCurrentResult ( ) . data ) . toBe ( data )
877
879
878
880
observer . setOptions ( {
@@ -949,7 +951,7 @@ describe('queryObserver', () => {
949
951
results . push ( result )
950
952
} )
951
953
952
- await sleep ( 1 )
954
+ await vi . advanceTimersByTimeAsync ( 1 )
953
955
954
956
observer . setOptions ( {
955
957
queryKey : key2 ,
@@ -961,7 +963,7 @@ describe('queryObserver', () => {
961
963
select : ( data ) => data . value ,
962
964
} )
963
965
964
- await sleep ( 1 )
966
+ await vi . advanceTimersByTimeAsync ( 1 )
965
967
unsubscribe ( )
966
968
expect ( results . length ) . toBe ( 4 )
967
969
expect ( keys . length ) . toBe ( 3 )
@@ -1016,7 +1018,7 @@ describe('queryObserver', () => {
1016
1018
results . push ( result )
1017
1019
} )
1018
1020
1019
- await sleep ( 1 )
1021
+ await vi . advanceTimersByTimeAsync ( 1 )
1020
1022
1021
1023
observer . setOptions ( {
1022
1024
queryKey : key2 ,
@@ -1028,7 +1030,7 @@ describe('queryObserver', () => {
1028
1030
} ,
1029
1031
} )
1030
1032
1031
- await sleep ( 1 )
1033
+ await vi . advanceTimersByTimeAsync ( 1 )
1032
1034
unsubscribe ( )
1033
1035
1034
1036
expect ( results . length ) . toBe ( 4 )
@@ -1079,7 +1081,7 @@ describe('queryObserver', () => {
1079
1081
results . push ( result )
1080
1082
} )
1081
1083
1082
- await sleep ( 1 )
1084
+ await vi . advanceTimersByTimeAsync ( 1 )
1083
1085
1084
1086
observer . setOptions ( {
1085
1087
queryKey : key2 ,
@@ -1088,7 +1090,7 @@ describe('queryObserver', () => {
1088
1090
select : stableSelect ,
1089
1091
} )
1090
1092
1091
- await sleep ( 1 )
1093
+ await vi . advanceTimersByTimeAsync ( 1 )
1092
1094
unsubscribe ( )
1093
1095
1094
1096
expect ( results . length ) . toBe ( 4 )
@@ -1170,8 +1172,8 @@ describe('queryObserver', () => {
1170
1172
}
1171
1173
} )
1172
1174
1173
- await waitFor ( ( ) => expect ( results [ 0 ] ?. isStale ) . toBe ( false ) )
1174
- await waitFor ( ( ) => expect ( results [ 1 ] ?. isStale ) . toBe ( true ) )
1175
+ await vi . waitFor ( ( ) => expect ( results [ 0 ] ?. isStale ) . toBe ( false ) )
1176
+ await vi . waitFor ( ( ) => expect ( results [ 1 ] ?. isStale ) . toBe ( true ) )
1175
1177
1176
1178
unsubscribe ( )
1177
1179
} )
@@ -1195,7 +1197,7 @@ describe('queryObserver', () => {
1195
1197
results . push ( observer . getCurrentResult ( ) )
1196
1198
} )
1197
1199
1198
- await waitFor ( ( ) => {
1200
+ await vi . waitFor ( ( ) => {
1199
1201
expect ( results . at ( - 1 ) ?. data ) . toBe ( 'data' )
1200
1202
} )
1201
1203
@@ -1228,7 +1230,7 @@ describe('queryObserver', () => {
1228
1230
results . push ( observer . getCurrentResult ( ) )
1229
1231
} )
1230
1232
1231
- await waitFor ( ( ) => {
1233
+ await vi . waitFor ( ( ) => {
1232
1234
expect ( results . at ( - 1 ) ?. status ) . toBe ( 'error' )
1233
1235
} )
1234
1236
@@ -1240,7 +1242,7 @@ describe('queryObserver', () => {
1240
1242
// fail again
1241
1243
const lengthBefore = results . length
1242
1244
observer . refetch ( )
1243
- await waitFor ( ( ) => {
1245
+ await vi . waitFor ( ( ) => {
1244
1246
expect ( results . length ) . toBeGreaterThan ( lengthBefore )
1245
1247
expect ( results . at ( - 1 ) ?. status ) . toBe ( 'error' )
1246
1248
} )
@@ -1256,7 +1258,7 @@ describe('queryObserver', () => {
1256
1258
succeeds = true
1257
1259
observer . refetch ( )
1258
1260
1259
- await waitFor ( ( ) => {
1261
+ await vi . waitFor ( ( ) => {
1260
1262
results . at ( - 1 ) ?. status === 'success'
1261
1263
} )
1262
1264
0 commit comments