@@ -16,12 +16,12 @@ describe('useIsFetching', () => {
16
16
17
17
// See https://github.com/tannerlinsley/react-query/issues/105
18
18
it ( 'should update as queries start and stop fetching' , async ( ) => {
19
- const queryCache = new QueryCache ( )
20
- const queryClient = new QueryClient ( { queryCache } )
19
+ const queryClient = new QueryClient ( )
21
20
const key = queryKey ( )
22
21
23
22
function IsFetching ( ) {
24
23
const isFetching = useIsFetching ( )
24
+
25
25
return < div > isFetching: { isFetching } </ div >
26
26
}
27
27
@@ -46,20 +46,19 @@ describe('useIsFetching', () => {
46
46
)
47
47
}
48
48
49
- const { getByText , getByRole } = renderWithClient ( queryClient , < Page /> )
49
+ const rendered = renderWithClient ( queryClient , < Page /> )
50
50
51
- expect ( getByText ( 'isFetching: 0' ) ) . toBeInTheDocument ( )
51
+ expect ( rendered . getByText ( 'isFetching: 0' ) ) . toBeInTheDocument ( )
52
52
53
- fireEvent . click ( getByRole ( 'button' , { name : / s e t R e a d y / i } ) )
53
+ fireEvent . click ( rendered . getByRole ( 'button' , { name : / s e t R e a d y / i } ) )
54
54
await vi . advanceTimersByTimeAsync ( 0 )
55
- expect ( getByText ( 'isFetching: 1' ) ) . toBeInTheDocument ( )
55
+ expect ( rendered . getByText ( 'isFetching: 1' ) ) . toBeInTheDocument ( )
56
56
await vi . advanceTimersByTimeAsync ( 51 )
57
- expect ( getByText ( 'isFetching: 0' ) ) . toBeInTheDocument ( )
57
+ expect ( rendered . getByText ( 'isFetching: 0' ) ) . toBeInTheDocument ( )
58
58
} )
59
59
60
60
it ( 'should not update state while rendering' , async ( ) => {
61
- const queryCache = new QueryCache ( )
62
- const queryClient = new QueryClient ( { queryCache } )
61
+ const queryClient = new QueryClient ( )
63
62
64
63
const key1 = queryKey ( )
65
64
const key2 = queryKey ( )
@@ -68,23 +67,27 @@ describe('useIsFetching', () => {
68
67
69
68
function IsFetching ( ) {
70
69
const isFetching = useIsFetching ( )
70
+
71
71
isFetchingArray . push ( isFetching )
72
- return null
72
+
73
+ return < div > isFetching: { isFetching } </ div >
73
74
}
74
75
75
76
function FirstQuery ( ) {
76
77
useQuery ( {
77
78
queryKey : key1 ,
78
- queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data ' ) ,
79
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data1 ' ) ,
79
80
} )
81
+
80
82
return null
81
83
}
82
84
83
85
function SecondQuery ( ) {
84
86
useQuery ( {
85
87
queryKey : key2 ,
86
- queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data ' ) ,
88
+ queryFn : ( ) => sleep ( 100 ) . then ( ( ) => 'data2 ' ) ,
87
89
} )
90
+
88
91
return null
89
92
}
90
93
@@ -108,7 +111,18 @@ describe('useIsFetching', () => {
108
111
109
112
renderWithClient ( queryClient , < Page /> )
110
113
111
- await vi . advanceTimersByTimeAsync ( 151 )
114
+ expect ( isFetchingArray [ 0 ] ) . toEqual ( 0 )
115
+ await vi . advanceTimersByTimeAsync ( 0 )
116
+ expect ( isFetchingArray [ 1 ] ) . toEqual ( 1 )
117
+ await vi . advanceTimersByTimeAsync ( 50 )
118
+ expect ( isFetchingArray [ 2 ] ) . toEqual ( 1 )
119
+ await vi . advanceTimersByTimeAsync ( 1 )
120
+ expect ( isFetchingArray [ 3 ] ) . toEqual ( 2 )
121
+ await vi . advanceTimersByTimeAsync ( 50 )
122
+ expect ( isFetchingArray [ 4 ] ) . toEqual ( 1 )
123
+ await vi . advanceTimersByTimeAsync ( 50 )
124
+ expect ( isFetchingArray [ 5 ] ) . toEqual ( 0 )
125
+
112
126
expect ( isFetchingArray ) . toEqual ( [ 0 , 1 , 1 , 2 , 1 , 0 ] )
113
127
} )
114
128
@@ -122,16 +136,18 @@ describe('useIsFetching', () => {
122
136
function One ( ) {
123
137
useQuery ( {
124
138
queryKey : key1 ,
125
- queryFn : ( ) => sleep ( 10 ) . then ( ( ) => 'test ' ) ,
139
+ queryFn : ( ) => sleep ( 10 ) . then ( ( ) => 'test1 ' ) ,
126
140
} )
141
+
127
142
return null
128
143
}
129
144
130
145
function Two ( ) {
131
146
useQuery ( {
132
147
queryKey : key2 ,
133
- queryFn : ( ) => sleep ( 20 ) . then ( ( ) => 'test ' ) ,
148
+ queryFn : ( ) => sleep ( 20 ) . then ( ( ) => 'test2 ' ) ,
134
149
} )
150
+
135
151
return null
136
152
}
137
153
@@ -155,15 +171,15 @@ describe('useIsFetching', () => {
155
171
)
156
172
}
157
173
158
- const { getByText , getByRole } = renderWithClient ( queryClient , < Page /> )
174
+ const rendered = renderWithClient ( queryClient , < Page /> )
159
175
160
- expect ( getByText ( 'isFetching: 0' ) ) . toBeInTheDocument ( )
176
+ expect ( rendered . getByText ( 'isFetching: 0' ) ) . toBeInTheDocument ( )
161
177
162
- fireEvent . click ( getByRole ( 'button' , { name : / s e t S t a r t e d / i } ) )
178
+ fireEvent . click ( rendered . getByRole ( 'button' , { name : / s e t S t a r t e d / i } ) )
163
179
await vi . advanceTimersByTimeAsync ( 0 )
164
- expect ( getByText ( 'isFetching: 1' ) ) . toBeInTheDocument ( )
180
+ expect ( rendered . getByText ( 'isFetching: 1' ) ) . toBeInTheDocument ( )
165
181
await vi . advanceTimersByTimeAsync ( 11 )
166
- expect ( getByText ( 'isFetching: 0' ) ) . toBeInTheDocument ( )
182
+ expect ( rendered . getByText ( 'isFetching: 0' ) ) . toBeInTheDocument ( )
167
183
168
184
// at no point should we have isFetching: 2
169
185
expect ( isFetchingArray ) . toEqual ( expect . not . arrayContaining ( [ 2 ] ) )
@@ -190,14 +206,16 @@ describe('useIsFetching', () => {
190
206
191
207
const rendered = renderWithClient ( queryClient , < Page /> )
192
208
193
- await vi . advanceTimersByTimeAsync ( 0 )
194
209
expect ( rendered . getByText ( 'isFetching: 1' ) ) . toBeInTheDocument ( )
195
210
await vi . advanceTimersByTimeAsync ( 11 )
196
211
expect ( rendered . getByText ( 'isFetching: 0' ) ) . toBeInTheDocument ( )
197
212
} )
198
213
199
214
it ( 'should use provided custom queryClient' , async ( ) => {
200
- const queryClient = new QueryClient ( )
215
+ const onSuccess = vi . fn ( )
216
+
217
+ const queryCache = new QueryCache ( { onSuccess } )
218
+ const queryClient = new QueryClient ( { queryCache } )
201
219
const key = queryKey ( )
202
220
203
221
function Page ( ) {
@@ -218,9 +236,11 @@ describe('useIsFetching', () => {
218
236
)
219
237
}
220
238
221
- const rendered = render ( < Page > </ Page > )
239
+ const rendered = render ( < Page / >)
222
240
223
- await vi . advanceTimersByTimeAsync ( 0 )
224
241
expect ( rendered . getByText ( 'isFetching: 1' ) ) . toBeInTheDocument ( )
242
+ await vi . advanceTimersByTimeAsync ( 11 )
243
+ expect ( rendered . getByText ( 'isFetching: 0' ) ) . toBeInTheDocument ( )
244
+ expect ( onSuccess ) . toHaveBeenCalledOnce ( )
225
245
} )
226
246
} )
0 commit comments