1
- import { describe , expect , it , vi } from 'vitest'
1
+ import { afterEach , beforeEach , describe , expect , it , vi } from 'vitest'
2
2
import React from 'react'
3
- import { fireEvent , waitFor } from '@testing-library/react'
3
+ import { fireEvent } from '@testing-library/react'
4
4
import { ErrorBoundary } from 'react-error-boundary'
5
5
import {
6
6
QueryCache ,
7
7
usePrefetchQuery ,
8
8
useQueryErrorResetBoundary ,
9
9
useSuspenseQuery ,
10
10
} from '..'
11
- import { createQueryClient , queryKey , renderWithClient , sleep } from './utils'
11
+ import { createQueryClient , queryKey , renderWithClient } from './utils'
12
12
13
13
import type { UseSuspenseQueryOptions } from '..'
14
14
15
15
const generateQueryFn = ( data : string ) =>
16
16
vi
17
17
. fn < ( ...args : Array < any > ) => Promise < string > > ( )
18
18
. mockImplementation ( async ( ) => {
19
- await sleep ( 10 )
19
+ await vi . advanceTimersByTimeAsync ( 10 )
20
20
21
21
return data
22
22
} )
@@ -25,6 +25,14 @@ describe('usePrefetchQuery', () => {
25
25
const queryCache = new QueryCache ( )
26
26
const queryClient = createQueryClient ( { queryCache } )
27
27
28
+ beforeEach ( ( ) => {
29
+ vi . useFakeTimers ( )
30
+ } )
31
+
32
+ afterEach ( ( ) => {
33
+ vi . useRealTimers ( )
34
+ } )
35
+
28
36
function Suspended < TData = unknown > ( props : {
29
37
queryOpts : UseSuspenseQueryOptions < TData , Error , TData , Array < string > >
30
38
children ?: React . ReactNode
@@ -62,7 +70,7 @@ describe('usePrefetchQuery', () => {
62
70
63
71
const rendered = renderWithClient ( queryClient , < App /> )
64
72
65
- await waitFor ( ( ) => rendered . getByText ( 'data: prefetchQuery' ) )
73
+ await vi . waitFor ( ( ) => rendered . getByText ( 'data: prefetchQuery' ) )
66
74
expect ( queryOpts . queryFn ) . toHaveBeenCalledTimes ( 1 )
67
75
} )
68
76
@@ -87,7 +95,7 @@ describe('usePrefetchQuery', () => {
87
95
const rendered = renderWithClient ( queryClient , < App /> )
88
96
89
97
expect ( rendered . queryByText ( 'fetching: true' ) ) . not . toBeInTheDocument ( )
90
- await waitFor ( ( ) =>
98
+ await vi . waitFor ( ( ) =>
91
99
rendered . getByText ( 'data: The usePrefetchQuery hook is smart!' ) ,
92
100
)
93
101
expect ( queryOpts . queryFn ) . not . toHaveBeenCalled ( )
@@ -104,7 +112,7 @@ describe('usePrefetchQuery', () => {
104
112
}
105
113
106
114
queryFn . mockImplementationOnce ( async ( ) => {
107
- await sleep ( 10 )
115
+ await vi . advanceTimersByTimeAsync ( 10 )
108
116
109
117
throw new Error ( 'Oops! Server error!' )
110
118
} )
@@ -125,7 +133,7 @@ describe('usePrefetchQuery', () => {
125
133
queryFn . mockClear ( )
126
134
const rendered = renderWithClient ( queryClient , < App /> )
127
135
128
- await waitFor ( ( ) => rendered . getByText ( 'Oops!' ) )
136
+ await vi . waitFor ( ( ) => rendered . getByText ( 'Oops!' ) )
129
137
expect ( rendered . queryByText ( 'data: Not an error' ) ) . not . toBeInTheDocument ( )
130
138
expect ( queryOpts . queryFn ) . not . toHaveBeenCalled ( )
131
139
@@ -156,7 +164,7 @@ describe('usePrefetchQuery', () => {
156
164
}
157
165
158
166
const rendered = renderWithClient ( queryClient , < App /> )
159
- await waitFor ( ( ) => rendered . getByText ( 'data: prefetchedQuery' ) )
167
+ await vi . waitFor ( ( ) => rendered . getByText ( 'data: prefetchedQuery' ) )
160
168
expect ( queryOpts . queryFn ) . toHaveBeenCalledTimes ( 1 )
161
169
} )
162
170
@@ -171,7 +179,7 @@ describe('usePrefetchQuery', () => {
171
179
}
172
180
173
181
queryFn . mockImplementationOnce ( async ( ) => {
174
- await sleep ( 10 )
182
+ await vi . advanceTimersByTimeAsync ( 10 )
175
183
176
184
throw new Error ( 'Oops! Server error!' )
177
185
} )
@@ -202,9 +210,11 @@ describe('usePrefetchQuery', () => {
202
210
203
211
const rendered = renderWithClient ( queryClient , < App /> )
204
212
205
- await waitFor ( ( ) => rendered . getByText ( 'Oops!' ) )
213
+ await vi . waitFor ( ( ) => rendered . getByText ( 'Oops!' ) )
206
214
fireEvent . click ( rendered . getByText ( 'Try again' ) )
207
- await waitFor ( ( ) => rendered . getByText ( 'data: This is fine :dog: :fire:' ) )
215
+ await vi . waitFor ( ( ) =>
216
+ rendered . getByText ( 'data: This is fine :dog: :fire:' ) ,
217
+ )
208
218
expect ( queryOpts . queryFn ) . toHaveBeenCalledTimes ( 1 )
209
219
consoleMock . mockRestore ( )
210
220
} )
@@ -253,10 +263,12 @@ describe('usePrefetchQuery', () => {
253
263
expect (
254
264
queryClient . getQueryState ( thirdQueryOpts . queryKey ) ?. fetchStatus ,
255
265
) . toBe ( 'fetching' )
256
- await waitFor ( ( ) => rendered . getByText ( 'Loading...' ) )
257
- await waitFor ( ( ) => rendered . getByText ( 'data: Prefetch is nice!' ) )
258
- await waitFor ( ( ) => rendered . getByText ( 'data: Prefetch is really nice!!' ) )
259
- await waitFor ( ( ) =>
266
+ await vi . waitFor ( ( ) => rendered . getByText ( 'Loading...' ) )
267
+ await vi . waitFor ( ( ) => rendered . getByText ( 'data: Prefetch is nice!' ) )
268
+ await vi . waitFor ( ( ) =>
269
+ rendered . getByText ( 'data: Prefetch is really nice!!' ) ,
270
+ )
271
+ await vi . waitFor ( ( ) =>
260
272
rendered . getByText ( 'data: Prefetch does not create waterfalls!!' ) ,
261
273
)
262
274
expect ( Fallback ) . toHaveBeenCalledTimes ( 1 )
0 commit comments