Skip to content

Commit 70c68ea

Browse files
committed
test(solid-query/suspense): switch to fake timers and replace 'waitFor' with 'vi.waitFor'
1 parent ed8cc23 commit 70c68ea

File tree

1 file changed

+68
-50
lines changed

1 file changed

+68
-50
lines changed

packages/solid-query/src/__tests__/suspense.test.tsx

Lines changed: 68 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { describe, expect, it, vi } from 'vitest'
2-
import { fireEvent, render, waitFor } from '@solidjs/testing-library'
1+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
2+
import { fireEvent, render } from '@solidjs/testing-library'
33
import {
44
ErrorBoundary,
55
Show,
@@ -19,6 +19,14 @@ import {
1919
import type { InfiniteData, UseInfiniteQueryResult, UseQueryResult } from '..'
2020

2121
describe("useQuery's in Suspense mode", () => {
22+
beforeEach(() => {
23+
vi.useFakeTimers()
24+
})
25+
26+
afterEach(() => {
27+
vi.useRealTimers()
28+
})
29+
2230
const queryCache = new QueryCache()
2331
const queryClient = new QueryClient({ queryCache })
2432

@@ -67,10 +75,10 @@ describe("useQuery's in Suspense mode", () => {
6775
</QueryClientProvider>
6876
))
6977

70-
await waitFor(() => rendered.getByText('data: 1'))
78+
await vi.waitFor(() => rendered.getByText('data: 1'))
7179
fireEvent.click(rendered.getByLabelText('toggle'))
7280

73-
await waitFor(() => rendered.getByText('data: 2'))
81+
await vi.waitFor(() => rendered.getByText('data: 2'))
7482

7583
expect(renders).toBe(4)
7684
expect(states.length).toBe(4)
@@ -115,7 +123,7 @@ describe("useQuery's in Suspense mode", () => {
115123
</QueryClientProvider>
116124
))
117125

118-
await waitFor(() => rendered.getByText('data: 1'))
126+
await vi.waitFor(() => rendered.getByText('data: 1'))
119127

120128
// eslint-disable-next-line cspell/spellchecker
121129
// TODO(lukemurray): in react this is 1 in solid this is 2 because suspense
@@ -127,7 +135,7 @@ describe("useQuery's in Suspense mode", () => {
127135
})
128136

129137
fireEvent.click(rendered.getByText('next'))
130-
await waitFor(() => rendered.getByText('data: 2'))
138+
await vi.waitFor(() => rendered.getByText('data: 2'))
131139

132140
// eslint-disable-next-line cspell/spellchecker
133141
// TODO(lukemurray): in react this is 2 and in solid it is 4
@@ -161,7 +169,7 @@ describe("useQuery's in Suspense mode", () => {
161169
</QueryClientProvider>
162170
))
163171

164-
await waitFor(() => rendered.getByText('rendered'))
172+
await vi.waitFor(() => rendered.getByText('rendered'))
165173

166174
expect(queryFn).toHaveBeenCalledTimes(1)
167175
})
@@ -205,7 +213,7 @@ describe("useQuery's in Suspense mode", () => {
205213
expect(queryCache.find({ queryKey: key })).toBeFalsy()
206214

207215
fireEvent.click(rendered.getByLabelText('toggle'))
208-
await waitFor(() => rendered.getByText('rendered'))
216+
await vi.waitFor(() => rendered.getByText('rendered'))
209217

210218
expect(queryCache.find({ queryKey: key })?.getObserversCount()).toBe(1)
211219

@@ -268,19 +276,21 @@ describe("useQuery's in Suspense mode", () => {
268276
</QueryClientProvider>
269277
))
270278

271-
await waitFor(() =>
279+
await vi.waitFor(() =>
272280
expect(rendered.getByText('Loading...')).toBeInTheDocument(),
273281
)
274282

275-
await waitFor(() =>
283+
await vi.waitFor(() =>
276284
expect(rendered.getByText('error boundary')).toBeInTheDocument(),
277285
)
278286

279-
await waitFor(() => expect(rendered.getByText('retry')).toBeInTheDocument())
287+
await vi.waitFor(() =>
288+
expect(rendered.getByText('retry')).toBeInTheDocument(),
289+
)
280290

281291
fireEvent.click(rendered.getByText('retry'))
282292

283-
await waitFor(() =>
293+
await vi.waitFor(() =>
284294
expect(rendered.getByText('rendered')).toBeInTheDocument(),
285295
)
286296
})
@@ -336,21 +346,25 @@ describe("useQuery's in Suspense mode", () => {
336346
</QueryClientProvider>
337347
))
338348

339-
await waitFor(() =>
349+
await vi.waitFor(() =>
340350
expect(rendered.getByText('Loading...')).toBeInTheDocument(),
341351
)
342-
await waitFor(() =>
352+
await vi.waitFor(() =>
343353
expect(rendered.getByText('error boundary')).toBeInTheDocument(),
344354
)
345-
await waitFor(() => expect(rendered.getByText('retry')).toBeInTheDocument())
355+
await vi.waitFor(() =>
356+
expect(rendered.getByText('retry')).toBeInTheDocument(),
357+
)
346358
fireEvent.click(rendered.getByText('retry'))
347-
await waitFor(() =>
359+
await vi.waitFor(() =>
348360
expect(rendered.getByText('error boundary')).toBeInTheDocument(),
349361
)
350-
await waitFor(() => expect(rendered.getByText('retry')).toBeInTheDocument())
362+
await vi.waitFor(() =>
363+
expect(rendered.getByText('retry')).toBeInTheDocument(),
364+
)
351365
succeed = true
352366
fireEvent.click(rendered.getByText('retry'))
353-
await waitFor(() =>
367+
await vi.waitFor(() =>
354368
expect(rendered.getByText('rendered')).toBeInTheDocument(),
355369
)
356370
})
@@ -402,26 +416,30 @@ describe("useQuery's in Suspense mode", () => {
402416
</QueryClientProvider>
403417
))
404418

405-
await waitFor(() =>
419+
await vi.waitFor(() =>
406420
expect(rendered.getByText('Loading...')).toBeInTheDocument(),
407421
)
408-
await waitFor(() =>
422+
await vi.waitFor(() =>
409423
expect(rendered.getByText('data: 1')).toBeInTheDocument(),
410424
)
411-
await waitFor(() =>
425+
await vi.waitFor(() =>
412426
expect(rendered.getByText('fetching: false')).toBeInTheDocument(),
413427
)
414-
await waitFor(() => expect(rendered.getByText('hide')).toBeInTheDocument())
428+
await vi.waitFor(() =>
429+
expect(rendered.getByText('hide')).toBeInTheDocument(),
430+
)
415431
fireEvent.click(rendered.getByText('hide'))
416-
await waitFor(() => expect(rendered.getByText('show')).toBeInTheDocument())
432+
await vi.waitFor(() =>
433+
expect(rendered.getByText('show')).toBeInTheDocument(),
434+
)
417435
fireEvent.click(rendered.getByText('show'))
418-
await waitFor(() =>
436+
await vi.waitFor(() =>
419437
expect(rendered.getByText('fetching: true')).toBeInTheDocument(),
420438
)
421-
await waitFor(() =>
439+
await vi.waitFor(() =>
422440
expect(rendered.getByText('data: 2')).toBeInTheDocument(),
423441
)
424-
await waitFor(() =>
442+
await vi.waitFor(() =>
425443
expect(rendered.getByText('fetching: false')).toBeInTheDocument(),
426444
)
427445
})
@@ -467,17 +485,17 @@ describe("useQuery's in Suspense mode", () => {
467485
</QueryClientProvider>
468486
))
469487

470-
await waitFor(() =>
488+
await vi.waitFor(() =>
471489
expect(rendered.getByText('Loading...')).toBeInTheDocument(),
472490
)
473-
await waitFor(() =>
491+
await vi.waitFor(() =>
474492
expect(rendered.getByText(`data: ${key1}`)).toBeInTheDocument(),
475493
)
476494
fireEvent.click(rendered.getByText('switch'))
477-
await waitFor(() =>
495+
await vi.waitFor(() =>
478496
expect(rendered.getByText('Loading...')).toBeInTheDocument(),
479497
)
480-
await waitFor(() =>
498+
await vi.waitFor(() =>
481499
expect(rendered.getByText(`data: ${key2}`)).toBeInTheDocument(),
482500
)
483501
})
@@ -530,10 +548,10 @@ describe("useQuery's in Suspense mode", () => {
530548
</QueryClientProvider>
531549
))
532550

533-
await waitFor(() =>
551+
await vi.waitFor(() =>
534552
expect(rendered.getByText('Loading...')).toBeInTheDocument(),
535553
)
536-
await waitFor(() =>
554+
await vi.waitFor(() =>
537555
expect(rendered.getByText('error boundary')).toBeInTheDocument(),
538556
)
539557

@@ -584,10 +602,10 @@ describe("useQuery's in Suspense mode", () => {
584602
</QueryClientProvider>
585603
))
586604

587-
await waitFor(() =>
605+
await vi.waitFor(() =>
588606
expect(rendered.getByText('Loading...')).toBeInTheDocument(),
589607
)
590-
await waitFor(() =>
608+
await vi.waitFor(() =>
591609
expect(rendered.getByText('rendered')).toBeInTheDocument(),
592610
)
593611
})
@@ -640,10 +658,10 @@ describe("useQuery's in Suspense mode", () => {
640658
</QueryClientProvider>
641659
))
642660

643-
await waitFor(() =>
661+
await vi.waitFor(() =>
644662
expect(rendered.getByText('Loading...')).toBeInTheDocument(),
645663
)
646-
await waitFor(() =>
664+
await vi.waitFor(() =>
647665
expect(rendered.getByText('error boundary')).toBeInTheDocument(),
648666
)
649667

@@ -696,10 +714,10 @@ describe("useQuery's in Suspense mode", () => {
696714
</QueryClientProvider>
697715
))
698716

699-
await waitFor(() =>
717+
await vi.waitFor(() =>
700718
expect(rendered.getByText('Loading...')).toBeInTheDocument(),
701719
)
702-
await waitFor(() =>
720+
await vi.waitFor(() =>
703721
expect(rendered.getByText('rendered')).toBeInTheDocument(),
704722
)
705723
})
@@ -739,10 +757,10 @@ describe("useQuery's in Suspense mode", () => {
739757
))
740758

741759
expect(queryFn).toHaveBeenCalledTimes(0)
742-
await sleep(5)
760+
await vi.advanceTimersByTimeAsync(5)
743761
fireEvent.click(rendered.getByRole('button', { name: /fire/i }))
744762

745-
await waitFor(() => {
763+
await vi.waitFor(() => {
746764
expect(rendered.getByRole('heading').textContent).toBe('23')
747765
})
748766

@@ -806,11 +824,11 @@ describe("useQuery's in Suspense mode", () => {
806824
))
807825

808826
// render suspense fallback (Loading...)
809-
await waitFor(() =>
827+
await vi.waitFor(() =>
810828
expect(rendered.getByText('Loading...')).toBeInTheDocument(),
811829
)
812830
// resolve promise -> render Page (rendered)
813-
await waitFor(() =>
831+
await vi.waitFor(() =>
814832
expect(rendered.getByText('rendered')).toBeInTheDocument(),
815833
)
816834

@@ -819,7 +837,7 @@ describe("useQuery's in Suspense mode", () => {
819837
// reset query -> and throw error
820838
fireEvent.click(rendered.getByLabelText('fail'))
821839
// render error boundary fallback (error boundary)
822-
await waitFor(() =>
840+
await vi.waitFor(() =>
823841
expect(rendered.getByText('error boundary')).toBeInTheDocument(),
824842
)
825843

@@ -876,11 +894,11 @@ describe("useQuery's in Suspense mode", () => {
876894
))
877895

878896
// render suspense fallback (Loading...)
879-
await waitFor(() =>
897+
await vi.waitFor(() =>
880898
expect(rendered.getByText('Loading...')).toBeInTheDocument(),
881899
)
882900
// resolve promise -> render Page (rendered)
883-
await waitFor(() =>
901+
await vi.waitFor(() =>
884902
expect(rendered.getByText('rendered')).toBeInTheDocument(),
885903
)
886904

@@ -889,7 +907,7 @@ describe("useQuery's in Suspense mode", () => {
889907
// change query key
890908
fireEvent.click(rendered.getByLabelText('fail'))
891909
// render error boundary fallback (error boundary)
892-
await waitFor(() =>
910+
await vi.waitFor(() =>
893911
expect(rendered.getByText('error boundary')).toBeInTheDocument(),
894912
)
895913

@@ -948,20 +966,20 @@ describe("useQuery's in Suspense mode", () => {
948966
))
949967

950968
// render empty data with 'rendered' when enabled is false
951-
await waitFor(() =>
969+
await vi.waitFor(() =>
952970
expect(rendered.getByText('rendered')).toBeInTheDocument(),
953971
)
954972

955973
// change enabled to true
956974
fireEvent.click(rendered.getByLabelText('fail'))
957975

958976
// render pending fallback
959-
await waitFor(() =>
977+
await vi.waitFor(() =>
960978
expect(rendered.getByText('Loading...')).toBeInTheDocument(),
961979
)
962980

963981
// render error boundary fallback (error boundary)
964-
await waitFor(() =>
982+
await vi.waitFor(() =>
965983
expect(rendered.getByText('error boundary')).toBeInTheDocument(),
966984
)
967985

@@ -1007,7 +1025,7 @@ describe("useQuery's in Suspense mode", () => {
10071025
</QueryClientProvider>
10081026
))
10091027

1010-
await waitFor(() =>
1028+
await vi.waitFor(() =>
10111029
expect(state).toMatchObject({
10121030
data: 1,
10131031
status: 'success',

0 commit comments

Comments
 (0)