Skip to content

Commit 8e77701

Browse files
sukvvonmanudeli
andauthored
test(vue-query/useQuery): switch to fake timers, and replace 'sleep' with 'advanceTimersByTimeAsync' (#9421)
Co-authored-by: Jonghyeon Ko <[email protected]>
1 parent 91bbf48 commit 8e77701

File tree

1 file changed

+46
-34
lines changed

1 file changed

+46
-34
lines changed

packages/vue-query/src/__tests__/useQuery.test.ts

Lines changed: 46 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { describe, expect, test, vi } from 'vitest'
1+
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'
22
import {
33
computed,
44
getCurrentInstance,
@@ -16,6 +16,14 @@ vi.mock('../useQueryClient')
1616
vi.mock('../useBaseQuery')
1717

1818
describe('useQuery', () => {
19+
beforeEach(() => {
20+
vi.useFakeTimers()
21+
})
22+
23+
afterEach(() => {
24+
vi.useRealTimers()
25+
})
26+
1927
test('should properly execute query', () => {
2028
const queryFn = () => sleep(0).then(() => 'Some data')
2129

@@ -56,7 +64,7 @@ describe('useQuery', () => {
5664
queryFn: () => sleep(0).then(() => 'result2'),
5765
})
5866

59-
await sleep(0)
67+
await vi.advanceTimersByTimeAsync(0)
6068

6169
expect(query).toMatchObject({
6270
status: { value: 'success' },
@@ -75,7 +83,7 @@ describe('useQuery', () => {
7583
enabled: true,
7684
})
7785

78-
await sleep(0)
86+
await vi.advanceTimersByTimeAsync(0)
7987

8088
expect(query).toMatchObject({
8189
status: { value: 'success' },
@@ -94,7 +102,7 @@ describe('useQuery', () => {
94102
enabled: true,
95103
})
96104

97-
await sleep(0)
105+
await vi.advanceTimersByTimeAsync(0)
98106

99107
expect(query).toMatchObject({
100108
status: { value: 'success' },
@@ -113,7 +121,7 @@ describe('useQuery', () => {
113121
sleep(0).then(() => Promise.reject(new Error('Some error'))),
114122
})
115123

116-
await sleep(0)
124+
await vi.advanceTimersByTimeAsync(0)
117125

118126
expect(query).toMatchObject({
119127
status: { value: 'error' },
@@ -132,24 +140,24 @@ describe('useQuery', () => {
132140
const secondKeyRef = ref('key7')
133141
const query = useQuery({
134142
queryKey: ['key6', secondKeyRef],
135-
queryFn: () => sleep(0).then(() => 'Some data'),
143+
queryFn: () => sleep(10).then(() => 'Some data'),
136144
})
137145

138-
await sleep(0)
146+
await vi.advanceTimersByTimeAsync(10)
139147

140148
expect(query).toMatchObject({
141149
status: { value: 'success' },
142150
})
143151

144152
secondKeyRef.value = 'key8'
145-
await sleep(0)
153+
await vi.advanceTimersByTimeAsync(0)
146154

147155
expect(query).toMatchObject({
148156
status: { value: 'pending' },
149157
data: { value: undefined },
150158
})
151159

152-
await sleep(0)
160+
await vi.advanceTimersByTimeAsync(10)
153161

154162
expect(query).toMatchObject({
155163
status: { value: 'success' },
@@ -160,11 +168,11 @@ describe('useQuery', () => {
160168
const enabled = ref(false)
161169
const query = useQuery({
162170
queryKey: ['key9'],
163-
queryFn: () => sleep(0).then(() => 'Some data'),
171+
queryFn: () => sleep(10).then(() => 'Some data'),
164172
enabled,
165173
})
166174

167-
await sleep(0)
175+
await vi.advanceTimersByTimeAsync(0)
168176

169177
expect(query).toMatchObject({
170178
fetchStatus: { value: 'idle' },
@@ -173,14 +181,14 @@ describe('useQuery', () => {
173181

174182
enabled.value = true
175183

176-
await sleep(0)
184+
await vi.advanceTimersByTimeAsync(0)
177185

178186
expect(query).toMatchObject({
179187
fetchStatus: { value: 'fetching' },
180188
data: { value: undefined },
181189
})
182190

183-
await sleep(0)
191+
await vi.advanceTimersByTimeAsync(10)
184192

185193
expect(query).toMatchObject({
186194
status: { value: 'success' },
@@ -197,7 +205,7 @@ describe('useQuery', () => {
197205

198206
const dependentQueryFn = vi
199207
.fn()
200-
.mockImplementation(() => sleep(0).then(() => 'Some data'))
208+
.mockImplementation(() => sleep(10).then(() => 'Some data'))
201209
const { fetchStatus, status } = useQuery(
202210
reactive({
203211
queryKey: ['dependant2'],
@@ -210,12 +218,12 @@ describe('useQuery', () => {
210218
expect(fetchStatus.value).toStrictEqual('idle')
211219
expect(dependentQueryFn).not.toHaveBeenCalled()
212220

213-
await sleep(0)
221+
await vi.advanceTimersByTimeAsync(0)
214222

215223
expect(data.value).toStrictEqual('Some data')
216224
expect(fetchStatus.value).toStrictEqual('fetching')
217225

218-
await sleep(0)
226+
await vi.advanceTimersByTimeAsync(10)
219227

220228
expect(fetchStatus.value).toStrictEqual('idle')
221229
expect(status.value).toStrictEqual('success')
@@ -238,11 +246,11 @@ describe('useQuery', () => {
238246

239247
expect(status.value).toStrictEqual('pending')
240248

241-
await sleep(0)
249+
await vi.advanceTimersByTimeAsync(0)
242250

243251
expect(status.value).toStrictEqual('pending')
244252

245-
await sleep(0)
253+
await vi.advanceTimersByTimeAsync(0)
246254

247255
expect(status.value).toStrictEqual('pending')
248256
})
@@ -289,7 +297,7 @@ describe('useQuery', () => {
289297

290298
checked.value = true
291299

292-
await sleep(0)
300+
await vi.advanceTimersByTimeAsync(0)
293301

294302
expect(fetchFn).toHaveBeenCalled()
295303
})
@@ -308,13 +316,13 @@ describe('useQuery', () => {
308316

309317
key1.value = 'key3'
310318

311-
await sleep(0)
319+
await vi.advanceTimersByTimeAsync(0)
312320

313321
expect(fetchFn).toHaveBeenCalledTimes(2)
314322

315323
key2.value = 'key4'
316324

317-
await sleep(0)
325+
await vi.advanceTimersByTimeAsync(0)
318326

319327
expect(fetchFn).toHaveBeenCalledTimes(3)
320328
})
@@ -349,31 +357,31 @@ describe('useQuery', () => {
349357

350358
key1.value = 'key1-updated'
351359

352-
await sleep(0)
360+
await vi.advanceTimersByTimeAsync(0)
353361

354362
expect(fetchFn).toHaveBeenCalledTimes(2)
355363

356364
key2.value = 'key2-updated'
357365

358-
await sleep(0)
366+
await vi.advanceTimersByTimeAsync(0)
359367

360368
expect(fetchFn).toHaveBeenCalledTimes(3)
361369

362370
key3.value = 'key3-updated'
363371

364-
await sleep(0)
372+
await vi.advanceTimersByTimeAsync(0)
365373

366374
expect(fetchFn).toHaveBeenCalledTimes(4)
367375

368376
key4.value = 'key4-updated'
369377

370-
await sleep(0)
378+
await vi.advanceTimersByTimeAsync(0)
371379

372380
expect(fetchFn).toHaveBeenCalledTimes(5)
373381

374382
key5.value = 'key5-updated'
375383

376-
await sleep(0)
384+
await vi.advanceTimersByTimeAsync(0)
377385

378386
expect(fetchFn).toHaveBeenCalledTimes(6)
379387
})
@@ -382,14 +390,14 @@ describe('useQuery', () => {
382390
test('should evaluate throwOnError when query is expected to throw', async () => {
383391
const boundaryFn = vi.fn()
384392
useQuery({
385-
queryKey: ['key0'],
393+
queryKey: ['key'],
386394
queryFn: () =>
387395
sleep(0).then(() => Promise.reject(new Error('Some error'))),
388396
retry: false,
389397
throwOnError: boundaryFn,
390398
})
391399

392-
await sleep(0)
400+
await vi.advanceTimersByTimeAsync(0)
393401

394402
expect(boundaryFn).toHaveBeenCalledTimes(1)
395403
expect(boundaryFn).toHaveBeenCalledWith(
@@ -415,7 +423,7 @@ describe('useQuery', () => {
415423
expect(result).toBeInstanceOf(Promise)
416424
})
417425

418-
test('should resolve after being enabled', () => {
426+
test('should resolve after being enabled', async () => {
419427
const getCurrentInstanceSpy = getCurrentInstance as Mock
420428
getCurrentInstanceSpy.mockImplementation(() => ({ suspense: {} }))
421429

@@ -432,9 +440,11 @@ describe('useQuery', () => {
432440
isEnabled.value = true
433441
}, 200)
434442

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)
438448
})
439449

440450
test('should resolve immediately when stale without refetching', () => {
@@ -467,7 +477,7 @@ describe('useQuery', () => {
467477
staleTime: 10000,
468478
})
469479

470-
await sleep(0)
480+
await vi.advanceTimersByTimeAsync(0)
471481

472482
expect(query).toMatchObject({
473483
status: { value: 'error' },
@@ -488,7 +498,9 @@ describe('useQuery', () => {
488498
throwOnError: boundaryFn,
489499
})
490500

491-
await query.suspense()
501+
query.suspense()
502+
503+
await vi.advanceTimersByTimeAsync(10000)
492504

493505
expect(boundaryFn).toHaveBeenCalledTimes(2)
494506
expect(boundaryFn).toHaveBeenNthCalledWith(

0 commit comments

Comments
 (0)