1
1
import { afterEach , beforeEach , describe , expect , test , vi } from 'vitest'
2
- import { waitFor } from '@testing-library/dom'
3
2
import { QueryCache , QueryClient , QueryObserver } from '..'
4
3
import { createQueryClient , queryKey , sleep } from './utils'
5
4
@@ -8,12 +7,14 @@ describe('queryCache', () => {
8
7
let queryCache : QueryCache
9
8
10
9
beforeEach ( ( ) => {
10
+ vi . useFakeTimers ( )
11
11
queryClient = createQueryClient ( )
12
12
queryCache = queryClient . getQueryCache ( )
13
13
} )
14
14
15
15
afterEach ( ( ) => {
16
16
queryClient . clear ( )
17
+ vi . useRealTimers ( )
17
18
} )
18
19
19
20
describe ( 'subscribe' , ( ) => {
@@ -23,7 +24,7 @@ describe('queryCache', () => {
23
24
const unsubscribe = queryCache . subscribe ( subscriber )
24
25
queryClient . setQueryData ( key , 'foo' )
25
26
const query = queryCache . find ( { queryKey : key } )
26
- await sleep ( 1 )
27
+ await vi . advanceTimersByTimeAsync ( 0 )
27
28
expect ( subscriber ) . toHaveBeenCalledWith ( { query, type : 'added' } )
28
29
unsubscribe ( )
29
30
} )
@@ -32,8 +33,11 @@ describe('queryCache', () => {
32
33
const key = queryKey ( )
33
34
const callback = vi . fn ( )
34
35
queryCache . subscribe ( callback )
35
- queryClient . prefetchQuery ( { queryKey : key , queryFn : ( ) => 'data' } )
36
- await sleep ( 100 )
36
+ queryClient . prefetchQuery ( {
37
+ queryKey : key ,
38
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data' ) ,
39
+ } )
40
+ await vi . advanceTimersByTimeAsync ( 100 )
37
41
expect ( callback ) . toHaveBeenCalled ( )
38
42
} )
39
43
@@ -54,9 +58,7 @@ describe('queryCache', () => {
54
58
55
59
const unsubScribeObserver = observer . subscribe ( vi . fn ( ) )
56
60
57
- await waitFor ( ( ) => {
58
- expect ( events . length ) . toBe ( 8 )
59
- } )
61
+ await vi . waitFor ( ( ) => expect ( events . length ) . toBe ( 8 ) )
60
62
61
63
expect ( events ) . toEqual ( [
62
64
'added' , // 1. Query added -> loading
@@ -81,9 +83,12 @@ describe('queryCache', () => {
81
83
const key = queryKey ( )
82
84
const callback = vi . fn ( )
83
85
queryCache . subscribe ( callback )
84
- queryClient . prefetchQuery ( { queryKey : key , queryFn : ( ) => 'data' } )
86
+ queryClient . prefetchQuery ( {
87
+ queryKey : key ,
88
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data' ) ,
89
+ } )
85
90
const query = queryCache . find ( { queryKey : key } )
86
- await sleep ( 100 )
91
+ await vi . advanceTimersByTimeAsync ( 100 )
87
92
expect ( callback ) . toHaveBeenCalledWith ( { query, type : 'added' } )
88
93
} )
89
94
@@ -93,10 +98,10 @@ describe('queryCache', () => {
93
98
queryCache . subscribe ( callback )
94
99
queryClient . prefetchQuery ( {
95
100
queryKey : key ,
96
- queryFn : ( ) => 'data' ,
101
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data' ) ,
97
102
initialData : 'initial' ,
98
103
} )
99
- await sleep ( 100 )
104
+ await vi . advanceTimersByTimeAsync ( 100 )
100
105
expect ( callback ) . toHaveBeenCalled ( )
101
106
} )
102
107
@@ -120,20 +125,23 @@ describe('queryCache', () => {
120
125
121
126
const testClient = new QueryClient ( { queryCache : testCache } )
122
127
123
- await testClient . prefetchQuery ( {
128
+ testClient . prefetchQuery ( {
124
129
queryKey : [ 'key1' ] ,
125
- queryFn : ( ) => 'data1' ,
130
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data1' ) ,
126
131
} )
132
+ await vi . advanceTimersByTimeAsync ( 100 )
127
133
expect ( testCache . findAll ( ) . length ) . toBe ( 1 )
128
- await testClient . prefetchQuery ( {
134
+ testClient . prefetchQuery ( {
129
135
queryKey : [ 'key2' ] ,
130
- queryFn : ( ) => 'data2' ,
136
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data2' ) ,
131
137
} )
138
+ await vi . advanceTimersByTimeAsync ( 100 )
132
139
expect ( testCache . findAll ( ) . length ) . toBe ( 2 )
133
- await testClient . prefetchQuery ( {
140
+ testClient . prefetchQuery ( {
134
141
queryKey : [ 'key3' ] ,
135
- queryFn : ( ) => 'data3' ,
142
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data3' ) ,
136
143
} )
144
+ await vi . advanceTimersByTimeAsync ( 100 )
137
145
expect ( testCache . findAll ( ) . length ) . toBe ( 1 )
138
146
expect ( testCache . findAll ( ) [ 0 ] ! . state . data ) . toBe ( 'data3' )
139
147
@@ -144,14 +152,22 @@ describe('queryCache', () => {
144
152
describe ( 'find' , ( ) => {
145
153
test ( 'find should filter correctly' , async ( ) => {
146
154
const key = queryKey ( )
147
- await queryClient . prefetchQuery ( { queryKey : key , queryFn : ( ) => 'data1' } )
155
+ queryClient . prefetchQuery ( {
156
+ queryKey : key ,
157
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data1' ) ,
158
+ } )
159
+ await vi . advanceTimersByTimeAsync ( 100 )
148
160
const query = queryCache . find ( { queryKey : key } ) !
149
161
expect ( query ) . toBeDefined ( )
150
162
} )
151
163
152
164
test ( 'find should filter correctly with exact set to false' , async ( ) => {
153
165
const key = queryKey ( )
154
- await queryClient . prefetchQuery ( { queryKey : key , queryFn : ( ) => 'data1' } )
166
+ queryClient . prefetchQuery ( {
167
+ queryKey : key ,
168
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data1' ) ,
169
+ } )
170
+ await vi . advanceTimersByTimeAsync ( 100 )
155
171
const query = queryCache . find ( { queryKey : key , exact : false } ) !
156
172
expect ( query ) . toBeDefined ( )
157
173
} )
@@ -162,22 +178,26 @@ describe('queryCache', () => {
162
178
const key1 = queryKey ( )
163
179
const key2 = queryKey ( )
164
180
const keyFetching = queryKey ( )
165
- await queryClient . prefetchQuery ( {
181
+ queryClient . prefetchQuery ( {
166
182
queryKey : key1 ,
167
- queryFn : ( ) => 'data1' ,
183
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data1' ) ,
168
184
} )
169
- await queryClient . prefetchQuery ( {
185
+ await vi . advanceTimersByTimeAsync ( 100 )
186
+ queryClient . prefetchQuery ( {
170
187
queryKey : key2 ,
171
- queryFn : ( ) => 'data2' ,
188
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data2' ) ,
172
189
} )
173
- await queryClient . prefetchQuery ( {
190
+ await vi . advanceTimersByTimeAsync ( 100 )
191
+ queryClient . prefetchQuery ( {
174
192
queryKey : [ { a : 'a' , b : 'b' } ] ,
175
- queryFn : ( ) => 'data3' ,
193
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data3' ) ,
176
194
} )
177
- await queryClient . prefetchQuery ( {
195
+ await vi . advanceTimersByTimeAsync ( 100 )
196
+ queryClient . prefetchQuery ( {
178
197
queryKey : [ 'posts' , 1 ] ,
179
- queryFn : ( ) => 'data4' ,
198
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data4' ) ,
180
199
} )
200
+ await vi . advanceTimersByTimeAsync ( 100 )
181
201
queryClient . invalidateQueries ( { queryKey : key2 } )
182
202
const query1 = queryCache . find ( { queryKey : key1 } ) !
183
203
const query2 = queryCache . find ( { queryKey : key2 } ) !
@@ -201,7 +221,11 @@ describe('queryCache', () => {
201
221
queryCache . findAll ( { queryKey : key1 , stale : false , type : 'active' } ) ,
202
222
) . toEqual ( [ ] )
203
223
expect (
204
- queryCache . findAll ( { queryKey : key1 , stale : false , type : 'inactive' } ) ,
224
+ queryCache . findAll ( {
225
+ queryKey : key1 ,
226
+ stale : false ,
227
+ type : 'inactive' ,
228
+ } ) ,
205
229
) . toEqual ( [ query1 ] )
206
230
expect (
207
231
queryCache . findAll ( {
@@ -263,17 +287,14 @@ describe('queryCache', () => {
263
287
queryCache . findAll ( { queryKey : key2 , fetchStatus : undefined } ) ,
264
288
) . toEqual ( [ query2 ] )
265
289
266
- const promise = queryClient . prefetchQuery ( {
290
+ queryClient . prefetchQuery ( {
267
291
queryKey : keyFetching ,
268
- queryFn : async ( ) => {
269
- await sleep ( 20 )
270
- return 'dataFetching'
271
- } ,
292
+ queryFn : ( ) => sleep ( 20 ) . then ( ( ) => 'dataFetching' ) ,
272
293
} )
273
294
expect ( queryCache . findAll ( { fetchStatus : 'fetching' } ) ) . toEqual ( [
274
295
queryCache . find ( { queryKey : keyFetching } ) ,
275
296
] )
276
- await promise
297
+ await vi . advanceTimersByTimeAsync ( 20 )
277
298
expect ( queryCache . findAll ( { fetchStatus : 'fetching' } ) ) . toEqual ( [ ] )
278
299
} )
279
300
@@ -300,10 +321,11 @@ describe('queryCache', () => {
300
321
const onError = vi . fn ( )
301
322
const testCache = new QueryCache ( { onSuccess, onError, onSettled } )
302
323
const testClient = createQueryClient ( { queryCache : testCache } )
303
- await testClient . prefetchQuery ( {
324
+ testClient . prefetchQuery ( {
304
325
queryKey : key ,
305
- queryFn : ( ) => Promise . reject < unknown > ( 'error' ) ,
326
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => Promise . reject < unknown > ( 'error' ) ) ,
306
327
} )
328
+ await vi . advanceTimersByTimeAsync ( 100 )
307
329
const query = testCache . find ( { queryKey : key } )
308
330
expect ( onError ) . toHaveBeenCalledWith ( 'error' , query )
309
331
expect ( onError ) . toHaveBeenCalledTimes ( 1 )
@@ -321,10 +343,11 @@ describe('queryCache', () => {
321
343
const onError = vi . fn ( )
322
344
const testCache = new QueryCache ( { onSuccess, onError, onSettled } )
323
345
const testClient = createQueryClient ( { queryCache : testCache } )
324
- await testClient . prefetchQuery ( {
346
+ testClient . prefetchQuery ( {
325
347
queryKey : key ,
326
- queryFn : ( ) => Promise . resolve ( { data : 5 } ) ,
348
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => ( { data : 5 } ) ) ,
327
349
} )
350
+ await vi . advanceTimersByTimeAsync ( 100 )
328
351
const query = testCache . find ( { queryKey : key } )
329
352
expect ( onSuccess ) . toHaveBeenCalledWith ( { data : 5 } , query )
330
353
expect ( onSuccess ) . toHaveBeenCalledTimes ( 1 )
@@ -338,7 +361,11 @@ describe('queryCache', () => {
338
361
test ( 'should not try to add a query already added to the cache' , async ( ) => {
339
362
const key = queryKey ( )
340
363
341
- await queryClient . prefetchQuery ( { queryKey : key , queryFn : ( ) => 'data1' } )
364
+ queryClient . prefetchQuery ( {
365
+ queryKey : key ,
366
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data1' ) ,
367
+ } )
368
+ await vi . advanceTimersByTimeAsync ( 100 )
342
369
343
370
const query = queryCache . findAll ( ) [ 0 ] !
344
371
const queryClone = Object . assign ( { } , query )
0 commit comments