Skip to content

Commit 2c8cf3c

Browse files
authored
test(query-core): use fake timers for queryCache.test.tsx (#8779)
* test(query-core): use fake timers for queryCache.test.tsx * chore: update * chore: update
1 parent 79496dd commit 2c8cf3c

File tree

1 file changed

+66
-39
lines changed

1 file changed

+66
-39
lines changed

‎packages/query-core/src/__tests__/queryCache.test.tsx

Lines changed: 66 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'
2-
import { waitFor } from '@testing-library/dom'
32
import { QueryCache, QueryClient, QueryObserver } from '..'
43
import { createQueryClient, queryKey, sleep } from './utils'
54

@@ -8,12 +7,14 @@ describe('queryCache', () => {
87
let queryCache: QueryCache
98

109
beforeEach(() => {
10+
vi.useFakeTimers()
1111
queryClient = createQueryClient()
1212
queryCache = queryClient.getQueryCache()
1313
})
1414

1515
afterEach(() => {
1616
queryClient.clear()
17+
vi.useRealTimers()
1718
})
1819

1920
describe('subscribe', () => {
@@ -23,7 +24,7 @@ describe('queryCache', () => {
2324
const unsubscribe = queryCache.subscribe(subscriber)
2425
queryClient.setQueryData(key, 'foo')
2526
const query = queryCache.find({ queryKey: key })
26-
await sleep(1)
27+
await vi.advanceTimersByTimeAsync(0)
2728
expect(subscriber).toHaveBeenCalledWith({ query, type: 'added' })
2829
unsubscribe()
2930
})
@@ -32,8 +33,11 @@ describe('queryCache', () => {
3233
const key = queryKey()
3334
const callback = vi.fn()
3435
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)
3741
expect(callback).toHaveBeenCalled()
3842
})
3943

@@ -54,9 +58,7 @@ describe('queryCache', () => {
5458

5559
const unsubScribeObserver = observer.subscribe(vi.fn())
5660

57-
await waitFor(() => {
58-
expect(events.length).toBe(8)
59-
})
61+
await vi.waitFor(() => expect(events.length).toBe(8))
6062

6163
expect(events).toEqual([
6264
'added', // 1. Query added -> loading
@@ -81,9 +83,12 @@ describe('queryCache', () => {
8183
const key = queryKey()
8284
const callback = vi.fn()
8385
queryCache.subscribe(callback)
84-
queryClient.prefetchQuery({ queryKey: key, queryFn: () => 'data' })
86+
queryClient.prefetchQuery({
87+
queryKey: key,
88+
queryFn: () => sleep(100).then(() => 'data'),
89+
})
8590
const query = queryCache.find({ queryKey: key })
86-
await sleep(100)
91+
await vi.advanceTimersByTimeAsync(100)
8792
expect(callback).toHaveBeenCalledWith({ query, type: 'added' })
8893
})
8994

@@ -93,10 +98,10 @@ describe('queryCache', () => {
9398
queryCache.subscribe(callback)
9499
queryClient.prefetchQuery({
95100
queryKey: key,
96-
queryFn: () => 'data',
101+
queryFn: () => sleep(100).then(() => 'data'),
97102
initialData: 'initial',
98103
})
99-
await sleep(100)
104+
await vi.advanceTimersByTimeAsync(100)
100105
expect(callback).toHaveBeenCalled()
101106
})
102107

@@ -120,20 +125,23 @@ describe('queryCache', () => {
120125

121126
const testClient = new QueryClient({ queryCache: testCache })
122127

123-
await testClient.prefetchQuery({
128+
testClient.prefetchQuery({
124129
queryKey: ['key1'],
125-
queryFn: () => 'data1',
130+
queryFn: () => sleep(100).then(() => 'data1'),
126131
})
132+
await vi.advanceTimersByTimeAsync(100)
127133
expect(testCache.findAll().length).toBe(1)
128-
await testClient.prefetchQuery({
134+
testClient.prefetchQuery({
129135
queryKey: ['key2'],
130-
queryFn: () => 'data2',
136+
queryFn: () => sleep(100).then(() => 'data2'),
131137
})
138+
await vi.advanceTimersByTimeAsync(100)
132139
expect(testCache.findAll().length).toBe(2)
133-
await testClient.prefetchQuery({
140+
testClient.prefetchQuery({
134141
queryKey: ['key3'],
135-
queryFn: () => 'data3',
142+
queryFn: () => sleep(100).then(() => 'data3'),
136143
})
144+
await vi.advanceTimersByTimeAsync(100)
137145
expect(testCache.findAll().length).toBe(1)
138146
expect(testCache.findAll()[0]!.state.data).toBe('data3')
139147

@@ -144,14 +152,22 @@ describe('queryCache', () => {
144152
describe('find', () => {
145153
test('find should filter correctly', async () => {
146154
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)
148160
const query = queryCache.find({ queryKey: key })!
149161
expect(query).toBeDefined()
150162
})
151163

152164
test('find should filter correctly with exact set to false', async () => {
153165
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)
155171
const query = queryCache.find({ queryKey: key, exact: false })!
156172
expect(query).toBeDefined()
157173
})
@@ -162,22 +178,26 @@ describe('queryCache', () => {
162178
const key1 = queryKey()
163179
const key2 = queryKey()
164180
const keyFetching = queryKey()
165-
await queryClient.prefetchQuery({
181+
queryClient.prefetchQuery({
166182
queryKey: key1,
167-
queryFn: () => 'data1',
183+
queryFn: () => sleep(100).then(() => 'data1'),
168184
})
169-
await queryClient.prefetchQuery({
185+
await vi.advanceTimersByTimeAsync(100)
186+
queryClient.prefetchQuery({
170187
queryKey: key2,
171-
queryFn: () => 'data2',
188+
queryFn: () => sleep(100).then(() => 'data2'),
172189
})
173-
await queryClient.prefetchQuery({
190+
await vi.advanceTimersByTimeAsync(100)
191+
queryClient.prefetchQuery({
174192
queryKey: [{ a: 'a', b: 'b' }],
175-
queryFn: () => 'data3',
193+
queryFn: () => sleep(100).then(() => 'data3'),
176194
})
177-
await queryClient.prefetchQuery({
195+
await vi.advanceTimersByTimeAsync(100)
196+
queryClient.prefetchQuery({
178197
queryKey: ['posts', 1],
179-
queryFn: () => 'data4',
198+
queryFn: () => sleep(100).then(() => 'data4'),
180199
})
200+
await vi.advanceTimersByTimeAsync(100)
181201
queryClient.invalidateQueries({ queryKey: key2 })
182202
const query1 = queryCache.find({ queryKey: key1 })!
183203
const query2 = queryCache.find({ queryKey: key2 })!
@@ -201,7 +221,11 @@ describe('queryCache', () => {
201221
queryCache.findAll({ queryKey: key1, stale: false, type: 'active' }),
202222
).toEqual([])
203223
expect(
204-
queryCache.findAll({ queryKey: key1, stale: false, type: 'inactive' }),
224+
queryCache.findAll({
225+
queryKey: key1,
226+
stale: false,
227+
type: 'inactive',
228+
}),
205229
).toEqual([query1])
206230
expect(
207231
queryCache.findAll({
@@ -263,17 +287,14 @@ describe('queryCache', () => {
263287
queryCache.findAll({ queryKey: key2, fetchStatus: undefined }),
264288
).toEqual([query2])
265289

266-
const promise = queryClient.prefetchQuery({
290+
queryClient.prefetchQuery({
267291
queryKey: keyFetching,
268-
queryFn: async () => {
269-
await sleep(20)
270-
return 'dataFetching'
271-
},
292+
queryFn: () => sleep(20).then(() => 'dataFetching'),
272293
})
273294
expect(queryCache.findAll({ fetchStatus: 'fetching' })).toEqual([
274295
queryCache.find({ queryKey: keyFetching }),
275296
])
276-
await promise
297+
await vi.advanceTimersByTimeAsync(20)
277298
expect(queryCache.findAll({ fetchStatus: 'fetching' })).toEqual([])
278299
})
279300

@@ -300,10 +321,11 @@ describe('queryCache', () => {
300321
const onError = vi.fn()
301322
const testCache = new QueryCache({ onSuccess, onError, onSettled })
302323
const testClient = createQueryClient({ queryCache: testCache })
303-
await testClient.prefetchQuery({
324+
testClient.prefetchQuery({
304325
queryKey: key,
305-
queryFn: () => Promise.reject<unknown>('error'),
326+
queryFn: () => sleep(100).then(() => Promise.reject<unknown>('error')),
306327
})
328+
await vi.advanceTimersByTimeAsync(100)
307329
const query = testCache.find({ queryKey: key })
308330
expect(onError).toHaveBeenCalledWith('error', query)
309331
expect(onError).toHaveBeenCalledTimes(1)
@@ -321,10 +343,11 @@ describe('queryCache', () => {
321343
const onError = vi.fn()
322344
const testCache = new QueryCache({ onSuccess, onError, onSettled })
323345
const testClient = createQueryClient({ queryCache: testCache })
324-
await testClient.prefetchQuery({
346+
testClient.prefetchQuery({
325347
queryKey: key,
326-
queryFn: () => Promise.resolve({ data: 5 }),
348+
queryFn: () => sleep(100).then(() => ({ data: 5 })),
327349
})
350+
await vi.advanceTimersByTimeAsync(100)
328351
const query = testCache.find({ queryKey: key })
329352
expect(onSuccess).toHaveBeenCalledWith({ data: 5 }, query)
330353
expect(onSuccess).toHaveBeenCalledTimes(1)
@@ -338,7 +361,11 @@ describe('queryCache', () => {
338361
test('should not try to add a query already added to the cache', async () => {
339362
const key = queryKey()
340363

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)
342369

343370
const query = queryCache.findAll()[0]!
344371
const queryClone = Object.assign({}, query)

0 commit comments

Comments
 (0)