1
1
import { afterEach , beforeEach , describe , expect , it , vi } from 'vitest'
2
2
import React from 'react'
3
- import { fireEvent } from '@testing-library/react'
3
+ import { act , fireEvent } from '@testing-library/react'
4
4
import { ErrorBoundary } from 'react-error-boundary'
5
- import { queryKey } from '@tanstack/query-test-utils'
5
+ import { queryKey , sleep } from '@tanstack/query-test-utils'
6
6
import {
7
7
QueryCache ,
8
8
QueryClient ,
@@ -18,7 +18,7 @@ const generateQueryFn = (data: string) =>
18
18
vi
19
19
. fn < ( ...args : Array < any > ) => Promise < string > > ( )
20
20
. mockImplementation ( async ( ) => {
21
- await vi . advanceTimersByTimeAsync ( 10 )
21
+ await sleep ( 10 )
22
22
23
23
return data
24
24
} )
@@ -72,7 +72,8 @@ describe('usePrefetchQuery', () => {
72
72
73
73
const rendered = renderWithClient ( queryClient , < App /> )
74
74
75
- await vi . waitFor ( ( ) => rendered . getByText ( 'data: prefetchQuery' ) )
75
+ await act ( ( ) => vi . advanceTimersByTimeAsync ( 11 ) )
76
+ rendered . getByText ( 'data: prefetchQuery' )
76
77
expect ( queryOpts . queryFn ) . toHaveBeenCalledTimes ( 1 )
77
78
} )
78
79
@@ -92,14 +93,13 @@ describe('usePrefetchQuery', () => {
92
93
)
93
94
}
94
95
95
- await queryClient . fetchQuery ( queryOpts )
96
+ queryClient . fetchQuery ( queryOpts )
97
+ await vi . advanceTimersByTimeAsync ( 10 )
96
98
queryOpts . queryFn . mockClear ( )
97
99
const rendered = renderWithClient ( queryClient , < App /> )
98
100
99
101
expect ( rendered . queryByText ( 'fetching: true' ) ) . not . toBeInTheDocument ( )
100
- await vi . waitFor ( ( ) =>
101
- rendered . getByText ( 'data: The usePrefetchQuery hook is smart!' ) ,
102
- )
102
+ rendered . getByText ( 'data: The usePrefetchQuery hook is smart!' )
103
103
expect ( queryOpts . queryFn ) . not . toHaveBeenCalled ( )
104
104
} )
105
105
@@ -114,7 +114,7 @@ describe('usePrefetchQuery', () => {
114
114
}
115
115
116
116
queryFn . mockImplementationOnce ( async ( ) => {
117
- await vi . advanceTimersByTimeAsync ( 10 )
117
+ await sleep ( 10 )
118
118
119
119
throw new Error ( 'Oops! Server error!' )
120
120
} )
@@ -131,11 +131,12 @@ describe('usePrefetchQuery', () => {
131
131
)
132
132
}
133
133
134
- await queryClient . prefetchQuery ( queryOpts )
134
+ queryClient . prefetchQuery ( queryOpts )
135
+ await vi . advanceTimersByTimeAsync ( 10 )
135
136
queryFn . mockClear ( )
136
137
const rendered = renderWithClient ( queryClient , < App /> )
137
138
138
- await vi . waitFor ( ( ) => rendered . getByText ( 'Oops!' ) )
139
+ rendered . getByText ( 'Oops!' )
139
140
expect ( rendered . queryByText ( 'data: Not an error' ) ) . not . toBeInTheDocument ( )
140
141
expect ( queryOpts . queryFn ) . not . toHaveBeenCalled ( )
141
142
@@ -166,7 +167,8 @@ describe('usePrefetchQuery', () => {
166
167
}
167
168
168
169
const rendered = renderWithClient ( queryClient , < App /> )
169
- await vi . waitFor ( ( ) => rendered . getByText ( 'data: prefetchedQuery' ) )
170
+ await act ( ( ) => vi . advanceTimersByTimeAsync ( 11 ) )
171
+ rendered . getByText ( 'data: prefetchedQuery' )
170
172
expect ( queryOpts . queryFn ) . toHaveBeenCalledTimes ( 1 )
171
173
} )
172
174
@@ -181,7 +183,7 @@ describe('usePrefetchQuery', () => {
181
183
}
182
184
183
185
queryFn . mockImplementationOnce ( async ( ) => {
184
- await vi . advanceTimersByTimeAsync ( 10 )
186
+ await sleep ( 10 )
185
187
186
188
throw new Error ( 'Oops! Server error!' )
187
189
} )
@@ -207,16 +209,16 @@ describe('usePrefetchQuery', () => {
207
209
)
208
210
}
209
211
210
- await queryClient . prefetchQuery ( queryOpts )
212
+ queryClient . prefetchQuery ( queryOpts )
213
+ await vi . advanceTimersByTimeAsync ( 10 )
211
214
queryFn . mockClear ( )
212
215
213
216
const rendered = renderWithClient ( queryClient , < App /> )
214
217
215
- await vi . waitFor ( ( ) => rendered . getByText ( 'Oops!' ) )
218
+ rendered . getByText ( 'Oops!' )
216
219
fireEvent . click ( rendered . getByText ( 'Try again' ) )
217
- await vi . waitFor ( ( ) =>
218
- rendered . getByText ( 'data: This is fine :dog: :fire:' ) ,
219
- )
220
+ await act ( ( ) => vi . advanceTimersByTimeAsync ( 11 ) )
221
+ rendered . getByText ( 'data: This is fine :dog: :fire:' )
220
222
expect ( queryOpts . queryFn ) . toHaveBeenCalledTimes ( 1 )
221
223
consoleMock . mockRestore ( )
222
224
} )
@@ -265,14 +267,11 @@ describe('usePrefetchQuery', () => {
265
267
expect (
266
268
queryClient . getQueryState ( thirdQueryOpts . queryKey ) ?. fetchStatus ,
267
269
) . toBe ( 'fetching' )
268
- await vi . waitFor ( ( ) => rendered . getByText ( 'Loading...' ) )
269
- await vi . waitFor ( ( ) => rendered . getByText ( 'data: Prefetch is nice!' ) )
270
- await vi . waitFor ( ( ) =>
271
- rendered . getByText ( 'data: Prefetch is really nice!!' ) ,
272
- )
273
- await vi . waitFor ( ( ) =>
274
- rendered . getByText ( 'data: Prefetch does not create waterfalls!!' ) ,
275
- )
270
+ rendered . getByText ( 'Loading...' )
271
+ await act ( ( ) => vi . advanceTimersByTimeAsync ( 11 ) )
272
+ rendered . getByText ( 'data: Prefetch is nice!' )
273
+ rendered . getByText ( 'data: Prefetch is really nice!!' )
274
+ rendered . getByText ( 'data: Prefetch does not create waterfalls!!' )
276
275
expect ( Fallback ) . toHaveBeenCalledTimes ( 1 )
277
276
expect ( firstQueryOpts . queryFn ) . toHaveBeenCalledTimes ( 1 )
278
277
expect ( secondQueryOpts . queryFn ) . toHaveBeenCalledTimes ( 1 )
0 commit comments