@tanstack/react-query 4.12.0 → 4.13.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/react-query",
3
- "version": "4.12.0",
3
+ "version": "4.13.4",
4
4
  "description": "Hooks for managing, caching and syncing asynchronous and remote data in React",
5
5
  "author": "tannerlinsley",
6
6
  "license": "MIT",
@@ -46,7 +46,7 @@
46
46
  "react-error-boundary": "^3.1.4"
47
47
  },
48
48
  "dependencies": {
49
- "@tanstack/query-core": "4.12.0",
49
+ "@tanstack/query-core": "4.13.4",
50
50
  "use-sync-external-store": "^1.2.0"
51
51
  },
52
52
  "peerDependencies": {
@@ -71,6 +71,7 @@ describe('useInfiniteQuery', () => {
71
71
  error: null,
72
72
  errorUpdatedAt: 0,
73
73
  failureCount: 0,
74
+ failureReason: null,
74
75
  errorUpdateCount: 0,
75
76
  fetchNextPage: expect.any(Function),
76
77
  fetchPreviousPage: expect.any(Function),
@@ -104,6 +105,7 @@ describe('useInfiniteQuery', () => {
104
105
  error: null,
105
106
  errorUpdatedAt: 0,
106
107
  failureCount: 0,
108
+ failureReason: null,
107
109
  errorUpdateCount: 0,
108
110
  fetchNextPage: expect.any(Function),
109
111
  fetchPreviousPage: expect.any(Function),
@@ -147,6 +147,57 @@ describe('useMutation', () => {
147
147
  expect(onSettledMock).toHaveBeenCalledWith(3)
148
148
  })
149
149
 
150
+ it('should set correct values for `failureReason` and `failureCount` on multiple mutate calls', async () => {
151
+ let count = 0
152
+ type Value = { count: number }
153
+
154
+ const mutateFn = jest.fn<Promise<Value>, [value: Value]>()
155
+
156
+ mutateFn.mockImplementationOnce(() => {
157
+ return Promise.reject('Error test Jonas')
158
+ })
159
+
160
+ mutateFn.mockImplementation(async (value) => {
161
+ await sleep(10)
162
+ return Promise.resolve(value)
163
+ })
164
+
165
+ function Page() {
166
+ const { mutate, failureCount, failureReason, data, status } = useMutation<
167
+ Value,
168
+ string,
169
+ Value
170
+ >(mutateFn)
171
+
172
+ return (
173
+ <div>
174
+ <h1>Data {data?.count}</h1>
175
+ <h2>Status {status}</h2>
176
+ <h2>Failed {failureCount} times</h2>
177
+ <h2>Failed because {failureReason ?? 'null'}</h2>
178
+ <button onClick={() => mutate({ count: ++count })}>mutate</button>
179
+ </div>
180
+ )
181
+ }
182
+
183
+ const rendered = renderWithClient(queryClient, <Page />)
184
+
185
+ await waitFor(() => rendered.getByText('Data'))
186
+
187
+ fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
188
+ await waitFor(() => rendered.getByText('Data'))
189
+ await waitFor(() => rendered.getByText('Status error'))
190
+ await waitFor(() => rendered.getByText('Failed 1 times'))
191
+ await waitFor(() => rendered.getByText('Failed because Error test Jonas'))
192
+
193
+ fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
194
+ await waitFor(() => rendered.getByText('Status loading'))
195
+ await waitFor(() => rendered.getByText('Status success'))
196
+ await waitFor(() => rendered.getByText('Data 2'))
197
+ await waitFor(() => rendered.getByText('Failed 0 times'))
198
+ await waitFor(() => rendered.getByText('Failed because null'))
199
+ })
200
+
150
201
  it('should be able to call `onError` and `onSettled` after each failed mutate', async () => {
151
202
  const onErrorMock = jest.fn()
152
203
  const onSettledMock = jest.fn()
@@ -581,21 +632,25 @@ describe('useMutation', () => {
581
632
  isLoading: false,
582
633
  isPaused: false,
583
634
  failureCount: 0,
635
+ failureReason: null,
584
636
  })
585
637
  expect(states[1]).toMatchObject({
586
638
  isLoading: true,
587
639
  isPaused: false,
588
640
  failureCount: 0,
641
+ failureReason: null,
589
642
  })
590
643
  expect(states[2]).toMatchObject({
591
644
  isLoading: true,
592
645
  isPaused: false,
593
646
  failureCount: 1,
647
+ failureReason: 'oops',
594
648
  })
595
649
  expect(states[3]).toMatchObject({
596
650
  isLoading: true,
597
651
  isPaused: true,
598
652
  failureCount: 1,
653
+ failureReason: 'oops',
599
654
  })
600
655
 
601
656
  onlineMock.mockReturnValue(true)
@@ -608,11 +663,13 @@ describe('useMutation', () => {
608
663
  isLoading: true,
609
664
  isPaused: false,
610
665
  failureCount: 1,
666
+ failureReason: 'oops',
611
667
  })
612
668
  expect(states[5]).toMatchObject({
613
669
  isLoading: false,
614
670
  isPaused: false,
615
- failureCount: 1,
671
+ failureCount: 0,
672
+ failureReason: null,
616
673
  data: 'data',
617
674
  })
618
675
 
@@ -233,6 +233,7 @@ describe('useQuery', () => {
233
233
  error: null,
234
234
  errorUpdatedAt: 0,
235
235
  failureCount: 0,
236
+ failureReason: null,
236
237
  errorUpdateCount: 0,
237
238
  isError: false,
238
239
  isFetched: false,
@@ -260,6 +261,7 @@ describe('useQuery', () => {
260
261
  error: null,
261
262
  errorUpdatedAt: 0,
262
263
  failureCount: 0,
264
+ failureReason: null,
263
265
  errorUpdateCount: 0,
264
266
  isError: false,
265
267
  isFetched: true,
@@ -303,6 +305,7 @@ describe('useQuery', () => {
303
305
  <div>
304
306
  <h1>Status: {state.status}</h1>
305
307
  <div>Failure Count: {state.failureCount}</div>
308
+ <div>Failure Reason: {state.failureReason}</div>
306
309
  </div>
307
310
  )
308
311
  }
@@ -317,6 +320,7 @@ describe('useQuery', () => {
317
320
  error: null,
318
321
  errorUpdatedAt: 0,
319
322
  failureCount: 0,
323
+ failureReason: null,
320
324
  errorUpdateCount: 0,
321
325
  isError: false,
322
326
  isFetched: false,
@@ -344,6 +348,7 @@ describe('useQuery', () => {
344
348
  error: null,
345
349
  errorUpdatedAt: 0,
346
350
  failureCount: 1,
351
+ failureReason: 'rejected',
347
352
  errorUpdateCount: 0,
348
353
  isError: false,
349
354
  isFetched: false,
@@ -371,6 +376,7 @@ describe('useQuery', () => {
371
376
  error: 'rejected',
372
377
  errorUpdatedAt: expect.any(Number),
373
378
  failureCount: 2,
379
+ failureReason: 'rejected',
374
380
  errorUpdateCount: 1,
375
381
  isError: true,
376
382
  isFetched: true,
@@ -395,30 +401,33 @@ describe('useQuery', () => {
395
401
 
396
402
  it('should set isFetchedAfterMount to true after a query has been fetched', async () => {
397
403
  const key = queryKey()
398
- const states: UseQueryResult<string>[] = []
399
404
 
400
405
  await queryClient.prefetchQuery(key, () => 'prefetched')
401
406
 
402
407
  function Page() {
403
- const state = useQuery(key, () => 'data')
404
- states.push(state)
405
- return null
408
+ const result = useQuery(key, () => 'new data')
409
+
410
+ return (
411
+ <>
412
+ <div>data: {result.data}</div>
413
+ <div>isFetched: {result.isFetched ? 'true' : 'false'}</div>
414
+ <div>
415
+ isFetchedAfterMount: {result.isFetchedAfterMount ? 'true' : 'false'}
416
+ </div>
417
+ </>
418
+ )
406
419
  }
407
420
 
408
- renderWithClient(queryClient, <Page />)
421
+ const rendered = renderWithClient(queryClient, <Page />)
409
422
 
410
- await sleep(10)
411
- expect(states.length).toBe(2)
423
+ rendered.getByText('data: prefetched')
424
+ rendered.getByText('isFetched: true')
425
+ rendered.getByText('isFetchedAfterMount: false')
412
426
 
413
- expect(states[0]).toMatchObject({
414
- data: 'prefetched',
415
- isFetched: true,
416
- isFetchedAfterMount: false,
417
- })
418
- expect(states[1]).toMatchObject({
419
- data: 'data',
420
- isFetched: true,
421
- isFetchedAfterMount: true,
427
+ await waitFor(() => {
428
+ rendered.getByText('data: new data')
429
+ rendered.getByText('isFetched: true')
430
+ rendered.getByText('isFetchedAfterMount: true')
422
431
  })
423
432
  })
424
433
 
@@ -595,7 +604,8 @@ describe('useQuery', () => {
595
604
 
596
605
  const rendered = renderWithClient(queryClient, <Page />)
597
606
 
598
- await sleep(5)
607
+ rendered.getByText('status: loading, fetchStatus: fetching')
608
+
599
609
  await queryClient.cancelQueries(key)
600
610
  // query cancellation will reset the query to it's initial state
601
611
  await waitFor(() =>
@@ -2280,15 +2290,22 @@ describe('useQuery', () => {
2280
2290
  }
2281
2291
 
2282
2292
  function Page() {
2283
- useQuery(key, queryFn)
2284
- useQuery(key, queryFn)
2293
+ const query1 = useQuery(key, queryFn)
2294
+ const query2 = useQuery(key, queryFn)
2285
2295
  renders++
2286
- return null
2296
+
2297
+ return (
2298
+ <div>
2299
+ {query1.data} {query2.data}
2300
+ </div>
2301
+ )
2287
2302
  }
2288
2303
 
2289
- renderWithClient(queryClient, <Page />)
2304
+ const rendered = renderWithClient(queryClient, <Page />)
2290
2305
 
2291
- await sleep(20)
2306
+ await waitFor(() => {
2307
+ rendered.getByText('data data')
2308
+ })
2292
2309
 
2293
2310
  // Should be 2 instead of 3
2294
2311
  expect(renders).toBe(2)
@@ -2877,6 +2894,7 @@ describe('useQuery', () => {
2877
2894
  <div>
2878
2895
  <div>error: {result.error ?? 'null'}</div>
2879
2896
  <div>failureCount: {result.failureCount}</div>
2897
+ <div>failureReason: {result.failureReason}</div>
2880
2898
  </div>
2881
2899
  )
2882
2900
  }
@@ -2895,6 +2913,7 @@ describe('useQuery', () => {
2895
2913
  const rendered = renderWithClient(queryClient, <App />)
2896
2914
 
2897
2915
  await waitFor(() => rendered.getByText('failureCount: 1'))
2916
+ await waitFor(() => rendered.getByText('failureReason: some error'))
2898
2917
  fireEvent.click(rendered.getByRole('button', { name: /hide/i }))
2899
2918
  await waitFor(() => rendered.getByRole('button', { name: /show/i }))
2900
2919
  fireEvent.click(rendered.getByRole('button', { name: /show/i }))
@@ -2925,6 +2944,7 @@ describe('useQuery', () => {
2925
2944
  <div>
2926
2945
  <div>error: {result.error ?? 'null'}</div>
2927
2946
  <div>failureCount: {result.failureCount}</div>
2947
+ <div>failureReason: {result.failureReason}</div>
2928
2948
  </div>
2929
2949
  )
2930
2950
  }
@@ -2946,6 +2966,7 @@ describe('useQuery', () => {
2946
2966
  const rendered = renderWithClient(queryClient, <App />)
2947
2967
 
2948
2968
  await waitFor(() => rendered.getByText('failureCount: 1'))
2969
+ await waitFor(() => rendered.getByText('failureReason: some error'))
2949
2970
  fireEvent.click(rendered.getByRole('button', { name: /hide/i }))
2950
2971
  fireEvent.click(rendered.getByRole('button', { name: /cancel/i }))
2951
2972
  await waitFor(() => rendered.getByRole('button', { name: /show/i }))
@@ -3169,15 +3190,20 @@ describe('useQuery', () => {
3169
3190
  })
3170
3191
 
3171
3192
  function Page() {
3172
- const { status, failureCount } = useQuery(key, queryFn, {
3173
- retry: 1,
3174
- retryDelay: 1,
3175
- })
3193
+ const { status, failureCount, failureReason } = useQuery<unknown, string>(
3194
+ key,
3195
+ queryFn,
3196
+ {
3197
+ retry: 1,
3198
+ retryDelay: 1,
3199
+ },
3200
+ )
3176
3201
 
3177
3202
  return (
3178
3203
  <div>
3179
3204
  <h1>{status}</h1>
3180
3205
  <h2>Failed {failureCount} times</h2>
3206
+ <h2>Failed because {failureReason}</h2>
3181
3207
  </div>
3182
3208
  )
3183
3209
  }
@@ -3189,6 +3215,7 @@ describe('useQuery', () => {
3189
3215
 
3190
3216
  // query should fail `retry + 1` times, since first time isn't a "retry"
3191
3217
  await waitFor(() => rendered.getByText('Failed 2 times'))
3218
+ await waitFor(() => rendered.getByText('Failed because Error test Barrett'))
3192
3219
 
3193
3220
  expect(queryFn).toHaveBeenCalledTimes(2)
3194
3221
  })
@@ -3207,7 +3234,7 @@ describe('useQuery', () => {
3207
3234
  })
3208
3235
 
3209
3236
  function Page() {
3210
- const { status, failureCount, error } = useQuery<
3237
+ const { status, failureCount, failureReason, error } = useQuery<
3211
3238
  unknown,
3212
3239
  string,
3213
3240
  [string]
@@ -3220,6 +3247,7 @@ describe('useQuery', () => {
3220
3247
  <div>
3221
3248
  <h1>{status}</h1>
3222
3249
  <h2>Failed {failureCount} times</h2>
3250
+ <h2>Failed because {failureReason}</h2>
3223
3251
  <h2>{error}</h2>
3224
3252
  </div>
3225
3253
  )
@@ -3231,6 +3259,8 @@ describe('useQuery', () => {
3231
3259
  await waitFor(() => rendered.getByText('error'))
3232
3260
 
3233
3261
  await waitFor(() => rendered.getByText('Failed 2 times'))
3262
+ await waitFor(() => rendered.getByText('Failed because NoRetry'))
3263
+
3234
3264
  await waitFor(() => rendered.getByText('NoRetry'))
3235
3265
 
3236
3266
  expect(queryFn).toHaveBeenCalledTimes(2)
@@ -3247,7 +3277,7 @@ describe('useQuery', () => {
3247
3277
  })
3248
3278
 
3249
3279
  function Page() {
3250
- const { status, failureCount } = useQuery(key, queryFn, {
3280
+ const { status, failureCount, failureReason } = useQuery(key, queryFn, {
3251
3281
  retry: 1,
3252
3282
  retryDelay: (_, error: DelayError) => error.delay,
3253
3283
  })
@@ -3256,6 +3286,7 @@ describe('useQuery', () => {
3256
3286
  <div>
3257
3287
  <h1>{status}</h1>
3258
3288
  <h2>Failed {failureCount} times</h2>
3289
+ <h2>Failed because DelayError: {failureReason?.delay}ms</h2>
3259
3290
  </div>
3260
3291
  )
3261
3292
  }
@@ -3266,6 +3297,7 @@ describe('useQuery', () => {
3266
3297
 
3267
3298
  expect(queryFn).toHaveBeenCalledTimes(1)
3268
3299
 
3300
+ await waitFor(() => rendered.getByText('Failed because DelayError: 50ms'))
3269
3301
  await waitFor(() => rendered.getByText('Failed 2 times'))
3270
3302
 
3271
3303
  expect(queryFn).toHaveBeenCalledTimes(2)
@@ -3281,7 +3313,7 @@ describe('useQuery', () => {
3281
3313
  let count = 0
3282
3314
 
3283
3315
  function Page() {
3284
- const query = useQuery(
3316
+ const query = useQuery<unknown, string>(
3285
3317
  key,
3286
3318
  () => {
3287
3319
  count++
@@ -3298,6 +3330,7 @@ describe('useQuery', () => {
3298
3330
  <div>error {String(query.error)}</div>
3299
3331
  <div>status {query.status}</div>
3300
3332
  <div>failureCount {query.failureCount}</div>
3333
+ <div>failureReason {query.failureReason}</div>
3301
3334
  </div>
3302
3335
  )
3303
3336
  }
@@ -3306,12 +3339,14 @@ describe('useQuery', () => {
3306
3339
 
3307
3340
  // The query should display the first error result
3308
3341
  await waitFor(() => rendered.getByText('failureCount 1'))
3342
+ await waitFor(() => rendered.getByText('failureReason fetching error 1'))
3309
3343
  await waitFor(() => rendered.getByText('status loading'))
3310
3344
  await waitFor(() => rendered.getByText('error null'))
3311
3345
 
3312
3346
  // Check if the query really paused
3313
3347
  await sleep(10)
3314
3348
  await waitFor(() => rendered.getByText('failureCount 1'))
3349
+ await waitFor(() => rendered.getByText('failureReason fetching error 1'))
3315
3350
 
3316
3351
  act(() => {
3317
3352
  // reset visibilityState to original value
@@ -3321,12 +3356,14 @@ describe('useQuery', () => {
3321
3356
 
3322
3357
  // Wait for the final result
3323
3358
  await waitFor(() => rendered.getByText('failureCount 4'))
3359
+ await waitFor(() => rendered.getByText('failureReason fetching error 4'))
3324
3360
  await waitFor(() => rendered.getByText('status error'))
3325
3361
  await waitFor(() => rendered.getByText('error fetching error 4'))
3326
3362
 
3327
3363
  // Check if the query really stopped
3328
3364
  await sleep(10)
3329
3365
  await waitFor(() => rendered.getByText('failureCount 4'))
3366
+ await waitFor(() => rendered.getByText('failureReason fetching error 4'))
3330
3367
 
3331
3368
  // Check if the error has been logged in the console
3332
3369
  expect(mockLogger.error).toHaveBeenCalledWith('fetching error 4')
@@ -3493,7 +3530,7 @@ describe('useQuery', () => {
3493
3530
  function Page() {
3494
3531
  let counter = 0
3495
3532
 
3496
- const query = useQuery(
3533
+ const query = useQuery<string, Error>(
3497
3534
  key,
3498
3535
  async () => {
3499
3536
  if (counter < 2) {
@@ -3509,6 +3546,7 @@ describe('useQuery', () => {
3509
3546
  return (
3510
3547
  <div>
3511
3548
  <div>failureCount {query.failureCount}</div>
3549
+ <div>failureReason {query.failureReason?.message ?? 'null'}</div>
3512
3550
  </div>
3513
3551
  )
3514
3552
  }
@@ -3516,7 +3554,9 @@ describe('useQuery', () => {
3516
3554
  const rendered = renderWithClient(queryClient, <Page />)
3517
3555
 
3518
3556
  await waitFor(() => rendered.getByText('failureCount 2'))
3557
+ await waitFor(() => rendered.getByText('failureReason error'))
3519
3558
  await waitFor(() => rendered.getByText('failureCount 0'))
3559
+ await waitFor(() => rendered.getByText('failureReason null'))
3520
3560
  })
3521
3561
 
3522
3562
  // See https://github.com/tannerlinsley/react-query/issues/199
@@ -4909,7 +4949,7 @@ describe('useQuery', () => {
4909
4949
  let count = 0
4910
4950
 
4911
4951
  function Page() {
4912
- const state = useQuery({
4952
+ const state = useQuery<string, string>({
4913
4953
  queryKey: key,
4914
4954
  queryFn: async () => {
4915
4955
  count++
@@ -4924,6 +4964,7 @@ describe('useQuery', () => {
4924
4964
  status: {state.status}, fetchStatus: {state.fetchStatus},
4925
4965
  failureCount: {state.failureCount}
4926
4966
  </div>
4967
+ <div>failureReason: {state.failureReason ?? 'null'}</div>
4927
4968
  <div>data: {state.data}</div>
4928
4969
  <button
4929
4970
  onClick={() => queryClient.invalidateQueries({ queryKey: key })}
@@ -4946,6 +4987,7 @@ describe('useQuery', () => {
4946
4987
  'status: success, fetchStatus: paused, failureCount: 0',
4947
4988
  ),
4948
4989
  )
4990
+ await waitFor(() => rendered.getByText('failureReason: null'))
4949
4991
 
4950
4992
  onlineMock.mockReturnValue(true)
4951
4993
  window.dispatchEvent(new Event('online'))
@@ -4955,11 +4997,13 @@ describe('useQuery', () => {
4955
4997
  'status: success, fetchStatus: fetching, failureCount: 0',
4956
4998
  ),
4957
4999
  )
5000
+ await waitFor(() => rendered.getByText('failureReason: null'))
4958
5001
  await waitFor(() =>
4959
5002
  rendered.getByText(
4960
5003
  'status: success, fetchStatus: idle, failureCount: 0',
4961
5004
  ),
4962
5005
  )
5006
+ await waitFor(() => rendered.getByText('failureReason: null'))
4963
5007
 
4964
5008
  await waitFor(() => {
4965
5009
  expect(rendered.getByText('data: data2')).toBeInTheDocument()
@@ -5198,7 +5242,7 @@ describe('useQuery', () => {
5198
5242
  let count = 0
5199
5243
 
5200
5244
  function Page() {
5201
- const state = useQuery({
5245
+ const state = useQuery<unknown, Error>({
5202
5246
  queryKey: key,
5203
5247
  queryFn: async (): Promise<unknown> => {
5204
5248
  count++
@@ -5215,6 +5259,7 @@ describe('useQuery', () => {
5215
5259
  status: {state.status}, fetchStatus: {state.fetchStatus},
5216
5260
  failureCount: {state.failureCount}
5217
5261
  </div>
5262
+ <div>failureReason: {state.failureReason?.message ?? 'null'}</div>
5218
5263
  </div>
5219
5264
  )
5220
5265
  }
@@ -5226,6 +5271,7 @@ describe('useQuery', () => {
5226
5271
  'status: loading, fetchStatus: fetching, failureCount: 1',
5227
5272
  ),
5228
5273
  )
5274
+ await waitFor(() => rendered.getByText('failureReason: failed1'))
5229
5275
 
5230
5276
  const onlineMock = mockNavigatorOnLine(false)
5231
5277
 
@@ -5236,6 +5282,7 @@ describe('useQuery', () => {
5236
5282
  'status: loading, fetchStatus: paused, failureCount: 1',
5237
5283
  ),
5238
5284
  )
5285
+ await waitFor(() => rendered.getByText('failureReason: failed1'))
5239
5286
 
5240
5287
  expect(count).toBe(1)
5241
5288
 
@@ -5245,6 +5292,7 @@ describe('useQuery', () => {
5245
5292
  await waitFor(() =>
5246
5293
  rendered.getByText('status: error, fetchStatus: idle, failureCount: 3'),
5247
5294
  )
5295
+ await waitFor(() => rendered.getByText('failureReason: failed3'))
5248
5296
 
5249
5297
  expect(count).toBe(3)
5250
5298
 
@@ -5539,7 +5587,7 @@ describe('useQuery', () => {
5539
5587
  let count = 0
5540
5588
 
5541
5589
  function Page() {
5542
- const state = useQuery({
5590
+ const state = useQuery<unknown, Error>({
5543
5591
  queryKey: key,
5544
5592
  queryFn: async (): Promise<unknown> => {
5545
5593
  count++
@@ -5557,6 +5605,7 @@ describe('useQuery', () => {
5557
5605
  status: {state.status}, fetchStatus: {state.fetchStatus},
5558
5606
  failureCount: {state.failureCount}
5559
5607
  </div>
5608
+ <div>failureReason: {state.failureReason?.message ?? 'null'}</div>
5560
5609
  </div>
5561
5610
  )
5562
5611
  }
@@ -5568,6 +5617,7 @@ describe('useQuery', () => {
5568
5617
  'status: loading, fetchStatus: paused, failureCount: 1',
5569
5618
  ),
5570
5619
  )
5620
+ await waitFor(() => rendered.getByText('failureReason: failed1'))
5571
5621
 
5572
5622
  expect(count).toBe(1)
5573
5623
 
@@ -5577,6 +5627,7 @@ describe('useQuery', () => {
5577
5627
  await waitFor(() =>
5578
5628
  rendered.getByText('status: error, fetchStatus: idle, failureCount: 3'),
5579
5629
  )
5630
+ await waitFor(() => rendered.getByText('failureReason: failed3'))
5580
5631
 
5581
5632
  expect(count).toBe(3)
5582
5633