diff --git a/packages/query-core/src/__tests__/query.test.tsx b/packages/query-core/src/__tests__/query.test.tsx index 192abac6b8a..74b4a009d66 100644 --- a/packages/query-core/src/__tests__/query.test.tsx +++ b/packages/query-core/src/__tests__/query.test.tsx @@ -849,6 +849,33 @@ describe('query', () => { unsubscribe() }) + it('fetch should refetch successfully after the previous fetch errored', async () => { + const key = queryKey() + + let shouldFail = true + const queryFn = vi.fn(() => { + if (shouldFail) { + return sleep(10).then(() => Promise.reject(new Error('fail'))) + } + return sleep(10).then(() => 'success') + }) + + queryClient.prefetchQuery({ queryKey: key, queryFn, retry: false }) + await vi.advanceTimersByTimeAsync(10) + + const query = queryCache.find({ queryKey: key })! + expect(queryFn).toHaveBeenCalledTimes(1) + expect(query.state.status).toBe('error') + + shouldFail = false + const refetchPromise = query.fetch({ queryKey: key, queryFn, retry: false }) + await vi.advanceTimersByTimeAsync(10) + + await expect(refetchPromise).resolves.toBe('success') + expect(queryFn).toHaveBeenCalledTimes(2) + expect(query.state.status).toBe('success') + }) + it('fetch should throw an error if the queryFn is not defined', async () => { const key = queryKey()