1
- import { describe , expect , test , vi } from 'vitest'
1
+ import { afterEach , beforeEach , describe , expect , test , vi } from 'vitest'
2
2
import {
3
3
computed ,
4
4
getCurrentInstance ,
@@ -16,6 +16,14 @@ vi.mock('../useQueryClient')
16
16
vi . mock ( '../useBaseQuery' )
17
17
18
18
describe ( 'useQuery' , ( ) => {
19
+ beforeEach ( ( ) => {
20
+ vi . useFakeTimers ( )
21
+ } )
22
+
23
+ afterEach ( ( ) => {
24
+ vi . useRealTimers ( )
25
+ } )
26
+
19
27
test ( 'should properly execute query' , ( ) => {
20
28
const queryFn = ( ) => sleep ( 0 ) . then ( ( ) => 'Some data' )
21
29
@@ -56,7 +64,7 @@ describe('useQuery', () => {
56
64
queryFn : ( ) => sleep ( 0 ) . then ( ( ) => 'result2' ) ,
57
65
} )
58
66
59
- await sleep ( 0 )
67
+ await vi . advanceTimersByTimeAsync ( 0 )
60
68
61
69
expect ( query ) . toMatchObject ( {
62
70
status : { value : 'success' } ,
@@ -75,7 +83,7 @@ describe('useQuery', () => {
75
83
enabled : true ,
76
84
} )
77
85
78
- await sleep ( 0 )
86
+ await vi . advanceTimersByTimeAsync ( 0 )
79
87
80
88
expect ( query ) . toMatchObject ( {
81
89
status : { value : 'success' } ,
@@ -94,7 +102,7 @@ describe('useQuery', () => {
94
102
enabled : true ,
95
103
} )
96
104
97
- await sleep ( 0 )
105
+ await vi . advanceTimersByTimeAsync ( 0 )
98
106
99
107
expect ( query ) . toMatchObject ( {
100
108
status : { value : 'success' } ,
@@ -113,7 +121,7 @@ describe('useQuery', () => {
113
121
sleep ( 0 ) . then ( ( ) => Promise . reject ( new Error ( 'Some error' ) ) ) ,
114
122
} )
115
123
116
- await sleep ( 0 )
124
+ await vi . advanceTimersByTimeAsync ( 0 )
117
125
118
126
expect ( query ) . toMatchObject ( {
119
127
status : { value : 'error' } ,
@@ -132,24 +140,24 @@ describe('useQuery', () => {
132
140
const secondKeyRef = ref ( 'key7' )
133
141
const query = useQuery ( {
134
142
queryKey : [ 'key6' , secondKeyRef ] ,
135
- queryFn : ( ) => sleep ( 0 ) . then ( ( ) => 'Some data' ) ,
143
+ queryFn : ( ) => sleep ( 10 ) . then ( ( ) => 'Some data' ) ,
136
144
} )
137
145
138
- await sleep ( 0 )
146
+ await vi . advanceTimersByTimeAsync ( 10 )
139
147
140
148
expect ( query ) . toMatchObject ( {
141
149
status : { value : 'success' } ,
142
150
} )
143
151
144
152
secondKeyRef . value = 'key8'
145
- await sleep ( 0 )
153
+ await vi . advanceTimersByTimeAsync ( 0 )
146
154
147
155
expect ( query ) . toMatchObject ( {
148
156
status : { value : 'pending' } ,
149
157
data : { value : undefined } ,
150
158
} )
151
159
152
- await sleep ( 0 )
160
+ await vi . advanceTimersByTimeAsync ( 10 )
153
161
154
162
expect ( query ) . toMatchObject ( {
155
163
status : { value : 'success' } ,
@@ -160,11 +168,11 @@ describe('useQuery', () => {
160
168
const enabled = ref ( false )
161
169
const query = useQuery ( {
162
170
queryKey : [ 'key9' ] ,
163
- queryFn : ( ) => sleep ( 0 ) . then ( ( ) => 'Some data' ) ,
171
+ queryFn : ( ) => sleep ( 10 ) . then ( ( ) => 'Some data' ) ,
164
172
enabled,
165
173
} )
166
174
167
- await sleep ( 0 )
175
+ await vi . advanceTimersByTimeAsync ( 0 )
168
176
169
177
expect ( query ) . toMatchObject ( {
170
178
fetchStatus : { value : 'idle' } ,
@@ -173,14 +181,14 @@ describe('useQuery', () => {
173
181
174
182
enabled . value = true
175
183
176
- await sleep ( 0 )
184
+ await vi . advanceTimersByTimeAsync ( 0 )
177
185
178
186
expect ( query ) . toMatchObject ( {
179
187
fetchStatus : { value : 'fetching' } ,
180
188
data : { value : undefined } ,
181
189
} )
182
190
183
- await sleep ( 0 )
191
+ await vi . advanceTimersByTimeAsync ( 10 )
184
192
185
193
expect ( query ) . toMatchObject ( {
186
194
status : { value : 'success' } ,
@@ -197,7 +205,7 @@ describe('useQuery', () => {
197
205
198
206
const dependentQueryFn = vi
199
207
. fn ( )
200
- . mockImplementation ( ( ) => sleep ( 0 ) . then ( ( ) => 'Some data' ) )
208
+ . mockImplementation ( ( ) => sleep ( 10 ) . then ( ( ) => 'Some data' ) )
201
209
const { fetchStatus, status } = useQuery (
202
210
reactive ( {
203
211
queryKey : [ 'dependant2' ] ,
@@ -210,12 +218,12 @@ describe('useQuery', () => {
210
218
expect ( fetchStatus . value ) . toStrictEqual ( 'idle' )
211
219
expect ( dependentQueryFn ) . not . toHaveBeenCalled ( )
212
220
213
- await sleep ( 0 )
221
+ await vi . advanceTimersByTimeAsync ( 0 )
214
222
215
223
expect ( data . value ) . toStrictEqual ( 'Some data' )
216
224
expect ( fetchStatus . value ) . toStrictEqual ( 'fetching' )
217
225
218
- await sleep ( 0 )
226
+ await vi . advanceTimersByTimeAsync ( 10 )
219
227
220
228
expect ( fetchStatus . value ) . toStrictEqual ( 'idle' )
221
229
expect ( status . value ) . toStrictEqual ( 'success' )
@@ -238,11 +246,11 @@ describe('useQuery', () => {
238
246
239
247
expect ( status . value ) . toStrictEqual ( 'pending' )
240
248
241
- await sleep ( 0 )
249
+ await vi . advanceTimersByTimeAsync ( 0 )
242
250
243
251
expect ( status . value ) . toStrictEqual ( 'pending' )
244
252
245
- await sleep ( 0 )
253
+ await vi . advanceTimersByTimeAsync ( 0 )
246
254
247
255
expect ( status . value ) . toStrictEqual ( 'pending' )
248
256
} )
@@ -289,7 +297,7 @@ describe('useQuery', () => {
289
297
290
298
checked . value = true
291
299
292
- await sleep ( 0 )
300
+ await vi . advanceTimersByTimeAsync ( 0 )
293
301
294
302
expect ( fetchFn ) . toHaveBeenCalled ( )
295
303
} )
@@ -308,13 +316,13 @@ describe('useQuery', () => {
308
316
309
317
key1 . value = 'key3'
310
318
311
- await sleep ( 0 )
319
+ await vi . advanceTimersByTimeAsync ( 0 )
312
320
313
321
expect ( fetchFn ) . toHaveBeenCalledTimes ( 2 )
314
322
315
323
key2 . value = 'key4'
316
324
317
- await sleep ( 0 )
325
+ await vi . advanceTimersByTimeAsync ( 0 )
318
326
319
327
expect ( fetchFn ) . toHaveBeenCalledTimes ( 3 )
320
328
} )
@@ -349,31 +357,31 @@ describe('useQuery', () => {
349
357
350
358
key1 . value = 'key1-updated'
351
359
352
- await sleep ( 0 )
360
+ await vi . advanceTimersByTimeAsync ( 0 )
353
361
354
362
expect ( fetchFn ) . toHaveBeenCalledTimes ( 2 )
355
363
356
364
key2 . value = 'key2-updated'
357
365
358
- await sleep ( 0 )
366
+ await vi . advanceTimersByTimeAsync ( 0 )
359
367
360
368
expect ( fetchFn ) . toHaveBeenCalledTimes ( 3 )
361
369
362
370
key3 . value = 'key3-updated'
363
371
364
- await sleep ( 0 )
372
+ await vi . advanceTimersByTimeAsync ( 0 )
365
373
366
374
expect ( fetchFn ) . toHaveBeenCalledTimes ( 4 )
367
375
368
376
key4 . value = 'key4-updated'
369
377
370
- await sleep ( 0 )
378
+ await vi . advanceTimersByTimeAsync ( 0 )
371
379
372
380
expect ( fetchFn ) . toHaveBeenCalledTimes ( 5 )
373
381
374
382
key5 . value = 'key5-updated'
375
383
376
- await sleep ( 0 )
384
+ await vi . advanceTimersByTimeAsync ( 0 )
377
385
378
386
expect ( fetchFn ) . toHaveBeenCalledTimes ( 6 )
379
387
} )
@@ -382,14 +390,14 @@ describe('useQuery', () => {
382
390
test ( 'should evaluate throwOnError when query is expected to throw' , async ( ) => {
383
391
const boundaryFn = vi . fn ( )
384
392
useQuery ( {
385
- queryKey : [ 'key0 ' ] ,
393
+ queryKey : [ 'key ' ] ,
386
394
queryFn : ( ) =>
387
395
sleep ( 0 ) . then ( ( ) => Promise . reject ( new Error ( 'Some error' ) ) ) ,
388
396
retry : false ,
389
397
throwOnError : boundaryFn ,
390
398
} )
391
399
392
- await sleep ( 0 )
400
+ await vi . advanceTimersByTimeAsync ( 0 )
393
401
394
402
expect ( boundaryFn ) . toHaveBeenCalledTimes ( 1 )
395
403
expect ( boundaryFn ) . toHaveBeenCalledWith (
@@ -415,7 +423,7 @@ describe('useQuery', () => {
415
423
expect ( result ) . toBeInstanceOf ( Promise )
416
424
} )
417
425
418
- test ( 'should resolve after being enabled' , ( ) => {
426
+ test ( 'should resolve after being enabled' , async ( ) => {
419
427
const getCurrentInstanceSpy = getCurrentInstance as Mock
420
428
getCurrentInstanceSpy . mockImplementation ( ( ) => ( { suspense : { } } ) )
421
429
@@ -432,9 +440,11 @@ describe('useQuery', () => {
432
440
isEnabled . value = true
433
441
} , 200 )
434
442
435
- return query . suspense ( ) . then ( ( ) => {
436
- expect ( afterTimeout ) . toBe ( true )
437
- } )
443
+ query . suspense ( )
444
+
445
+ await vi . advanceTimersByTimeAsync ( 200 )
446
+
447
+ expect ( afterTimeout ) . toBe ( true )
438
448
} )
439
449
440
450
test ( 'should resolve immediately when stale without refetching' , ( ) => {
@@ -467,7 +477,7 @@ describe('useQuery', () => {
467
477
staleTime : 10000 ,
468
478
} )
469
479
470
- await sleep ( 0 )
480
+ await vi . advanceTimersByTimeAsync ( 0 )
471
481
472
482
expect ( query ) . toMatchObject ( {
473
483
status : { value : 'error' } ,
@@ -488,7 +498,9 @@ describe('useQuery', () => {
488
498
throwOnError : boundaryFn ,
489
499
} )
490
500
491
- await query . suspense ( )
501
+ query . suspense ( )
502
+
503
+ await vi . advanceTimersByTimeAsync ( 10000 )
492
504
493
505
expect ( boundaryFn ) . toHaveBeenCalledTimes ( 2 )
494
506
expect ( boundaryFn ) . toHaveBeenNthCalledWith (
0 commit comments