1
- import { describe , expect , it } from 'vitest'
2
- import { fireEvent , render , waitFor } from '@testing-library/react'
1
+ import { afterEach , beforeEach , describe , expect , it , vi } from 'vitest'
2
+ import { fireEvent , render } from '@testing-library/react'
3
3
import * as React from 'react'
4
4
import { QueryCache , useIsFetching , useQuery } from '..'
5
5
import {
6
6
createQueryClient ,
7
7
queryKey ,
8
8
renderWithClient ,
9
9
setActTimeout ,
10
- sleep ,
11
10
} from './utils'
12
11
13
12
describe ( 'useIsFetching' , ( ) => {
13
+ beforeEach ( ( ) => {
14
+ vi . useFakeTimers ( )
15
+ } )
16
+
17
+ afterEach ( ( ) => {
18
+ vi . useRealTimers ( )
19
+ } )
20
+
14
21
// See https://github.com/tannerlinsley/react-query/issues/105
15
22
it ( 'should update as queries start and stop fetching' , async ( ) => {
16
23
const queryCache = new QueryCache ( )
@@ -28,7 +35,7 @@ describe('useIsFetching', () => {
28
35
useQuery ( {
29
36
queryKey : key ,
30
37
queryFn : async ( ) => {
31
- await sleep ( 50 )
38
+ await vi . advanceTimersByTimeAsync ( 50 )
32
39
return 'test'
33
40
} ,
34
41
enabled : ready ,
@@ -48,10 +55,19 @@ describe('useIsFetching', () => {
48
55
49
56
const { findByText, getByRole } = renderWithClient ( queryClient , < Page /> )
50
57
51
- await findByText ( 'isFetching: 0' )
58
+ await vi . waitFor ( ( ) => {
59
+ findByText ( 'isFetching: 0' )
60
+ } )
61
+
52
62
fireEvent . click ( getByRole ( 'button' , { name : / s e t R e a d y / i } ) )
53
- await findByText ( 'isFetching: 1' )
54
- await findByText ( 'isFetching: 0' )
63
+
64
+ await vi . waitFor ( ( ) => {
65
+ findByText ( 'isFetching: 1' )
66
+ } )
67
+
68
+ await vi . waitFor ( ( ) => {
69
+ findByText ( 'isFetching: 0' )
70
+ } )
55
71
} )
56
72
57
73
it ( 'should not update state while rendering' , async ( ) => {
@@ -73,7 +89,7 @@ describe('useIsFetching', () => {
73
89
useQuery ( {
74
90
queryKey : key1 ,
75
91
queryFn : async ( ) => {
76
- await sleep ( 100 )
92
+ await vi . advanceTimersByTimeAsync ( 100 )
77
93
return 'data'
78
94
} ,
79
95
} )
@@ -84,7 +100,7 @@ describe('useIsFetching', () => {
84
100
useQuery ( {
85
101
queryKey : key2 ,
86
102
queryFn : async ( ) => {
87
- await sleep ( 100 )
103
+ await vi . advanceTimersByTimeAsync ( 100 )
88
104
return 'data'
89
105
} ,
90
106
} )
@@ -110,7 +126,10 @@ describe('useIsFetching', () => {
110
126
}
111
127
112
128
renderWithClient ( queryClient , < Page /> )
113
- await waitFor ( ( ) => expect ( isFetchingArray ) . toEqual ( [ 0 , 1 , 1 , 2 , 1 , 0 ] ) )
129
+
130
+ await vi . waitFor ( ( ) => {
131
+ expect ( isFetchingArray ) . toEqual ( [ 0 , 1 , 1 , 2 , 1 , 0 ] )
132
+ } )
114
133
} )
115
134
116
135
it ( 'should be able to filter' , async ( ) => {
@@ -124,7 +143,7 @@ describe('useIsFetching', () => {
124
143
useQuery ( {
125
144
queryKey : key1 ,
126
145
queryFn : async ( ) => {
127
- await sleep ( 10 )
146
+ await vi . advanceTimersByTimeAsync ( 10 )
128
147
return 'test'
129
148
} ,
130
149
} )
@@ -135,7 +154,7 @@ describe('useIsFetching', () => {
135
154
useQuery ( {
136
155
queryKey : key2 ,
137
156
queryFn : async ( ) => {
138
- await sleep ( 20 )
157
+ await vi . advanceTimersByTimeAsync ( 20 )
139
158
return 'test'
140
159
} ,
141
160
} )
@@ -164,10 +183,20 @@ describe('useIsFetching', () => {
164
183
165
184
const { findByText, getByRole } = renderWithClient ( queryClient , < Page /> )
166
185
167
- await findByText ( 'isFetching: 0' )
186
+ await vi . waitFor ( ( ) => {
187
+ findByText ( 'isFetching: 0' )
188
+ } )
189
+
168
190
fireEvent . click ( getByRole ( 'button' , { name : / s e t S t a r t e d / i } ) )
169
- await findByText ( 'isFetching: 1' )
170
- await findByText ( 'isFetching: 0' )
191
+
192
+ await vi . waitFor ( ( ) => {
193
+ findByText ( 'isFetching: 1' )
194
+ } )
195
+
196
+ await vi . waitFor ( ( ) => {
197
+ findByText ( 'isFetching: 0' )
198
+ } )
199
+
171
200
// at no point should we have isFetching: 2
172
201
expect ( isFetchingArray ) . toEqual ( expect . not . arrayContaining ( [ 2 ] ) )
173
202
} )
@@ -180,7 +209,7 @@ describe('useIsFetching', () => {
180
209
useQuery ( {
181
210
queryKey : key ,
182
211
queryFn : async ( ) => {
183
- await sleep ( 10 )
212
+ await vi . advanceTimersByTimeAsync ( 10 )
184
213
return 'test'
185
214
} ,
186
215
} )
@@ -196,8 +225,13 @@ describe('useIsFetching', () => {
196
225
197
226
const rendered = renderWithClient ( queryClient , < Page /> )
198
227
199
- await rendered . findByText ( 'isFetching: 1' )
200
- await rendered . findByText ( 'isFetching: 0' )
228
+ await vi . waitFor ( ( ) => {
229
+ rendered . findByText ( 'isFetching: 1' )
230
+ } )
231
+
232
+ await vi . waitFor ( ( ) => {
233
+ rendered . findByText ( 'isFetching: 0' )
234
+ } )
201
235
} )
202
236
203
237
it ( 'should use provided custom queryClient' , async ( ) => {
@@ -209,7 +243,7 @@ describe('useIsFetching', () => {
209
243
{
210
244
queryKey : key ,
211
245
queryFn : async ( ) => {
212
- await sleep ( 10 )
246
+ await vi . advanceTimersByTimeAsync ( 10 )
213
247
return 'test'
214
248
} ,
215
249
} ,
@@ -227,6 +261,8 @@ describe('useIsFetching', () => {
227
261
228
262
const rendered = render ( < Page > </ Page > )
229
263
230
- await waitFor ( ( ) => rendered . getByText ( 'isFetching: 1' ) )
264
+ await vi . waitFor ( ( ) => {
265
+ rendered . getByText ( 'isFetching: 1' )
266
+ } )
231
267
} )
232
268
} )
0 commit comments