diff --git a/packages/query-core/src/__tests__/queryObserver.test.tsx b/packages/query-core/src/__tests__/queryObserver.test.tsx index 6b44576de5..a977a4f735 100644 --- a/packages/query-core/src/__tests__/queryObserver.test.tsx +++ b/packages/query-core/src/__tests__/queryObserver.test.tsx @@ -7,7 +7,6 @@ import { test, vi, } from 'vitest' -import { waitFor } from '@testing-library/dom' import { QueryObserver, focusManager } from '..' import { createQueryClient, queryKey, sleep } from './utils' import type { QueryClient, QueryObserverResult } from '..' @@ -16,6 +15,7 @@ describe('queryObserver', () => { let queryClient: QueryClient beforeEach(() => { + vi.useFakeTimers() queryClient = createQueryClient({ defaultOptions: { queries: { @@ -28,6 +28,7 @@ describe('queryObserver', () => { afterEach(() => { queryClient.clear() + vi.useRealTimers() }) test('should trigger a fetch when subscribed', async () => { @@ -37,7 +38,6 @@ describe('queryObserver', () => { .mockReturnValue('data') const observer = new QueryObserver(queryClient, { queryKey: key, queryFn }) const unsubscribe = observer.subscribe(() => undefined) - await sleep(1) unsubscribe() expect(queryFn).toHaveBeenCalledTimes(1) }) @@ -109,7 +109,7 @@ describe('queryObserver', () => { fetchStatus: 'idle', data: undefined, }) - await waitFor(() => expect(count).toBe(0)) + await vi.waitFor(() => expect(count).toBe(0)) unsubscribe() }) @@ -128,7 +128,7 @@ describe('queryObserver', () => { data: undefined, }) - await waitFor(() => expect(count).toBe(1)) + await vi.waitFor(() => expect(count).toBe(1)) expect(observer.getCurrentResult()).toMatchObject({ status: 'success', fetchStatus: 'idle', @@ -158,7 +158,7 @@ describe('queryObserver', () => { data: undefined, }) - await waitFor(() => expect(count).toBe(1)) + await vi.waitFor(() => expect(count).toBe(1)) unsubscribe() }) @@ -194,7 +194,7 @@ describe('queryObserver', () => { fetchStatus: 'fetching', data: undefined, }) - await waitFor(() => expect(count).toBe(1)) + await vi.waitFor(() => expect(count).toBe(1)) unsubscribe() }) @@ -208,12 +208,12 @@ describe('queryObserver', () => { queryClient.invalidateQueries({ queryKey: key, refetchType: 'inactive' }) // should not refetch since it was active and we only refetch inactive - await waitFor(() => expect(count).toBe(0)) + await vi.waitFor(() => expect(count).toBe(0)) queryClient.invalidateQueries({ queryKey: key, refetchType: 'active' }) // should refetch since it was active and we refetch active - await waitFor(() => expect(count).toBe(1)) + await vi.waitFor(() => expect(count).toBe(1)) // Toggle enabled enabled = false @@ -221,7 +221,7 @@ describe('queryObserver', () => { // should not refetch since it is not active and we only refetch active queryClient.invalidateQueries({ queryKey: key, refetchType: 'active' }) - await waitFor(() => expect(count).toBe(1)) + await vi.waitFor(() => expect(count).toBe(1)) unsubscribe() }) @@ -251,7 +251,7 @@ describe('queryObserver', () => { data: undefined, }) - await waitFor(() => expect(count).toBe(1)) + await vi.waitFor(() => expect(count).toBe(1)) // re-subscribe after data comes in unsubscribe = observer.subscribe(vi.fn()) @@ -275,9 +275,9 @@ describe('queryObserver', () => { const unsubscribe = observer.subscribe((result) => { results.push(result) }) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) observer.setOptions({ queryKey: key2, queryFn: () => 2 }) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) unsubscribe() expect(results.length).toBe(4) expect(results[0]).toMatchObject({ data: undefined, status: 'pending' }) @@ -300,7 +300,7 @@ describe('queryObserver', () => { >() observerResult = result }) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) unsubscribe() expect(observerResult).toMatchObject({ data: { myCount: 1 } }) }) @@ -330,7 +330,7 @@ describe('queryObserver', () => { const unsubscribe = observer.subscribe((result) => { observerResult = result }) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) unsubscribe() expect(observerResult).toMatchObject({ data: { myCount: 1 } }) }) @@ -374,13 +374,13 @@ describe('queryObserver', () => { const unsubscribe = observer.subscribe((result) => { results.push(result) }) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) observer.setOptions({ queryKey: key, queryFn, select: select2, }) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) await observer.refetch() unsubscribe() expect(count).toBe(2) @@ -429,13 +429,13 @@ describe('queryObserver', () => { const unsubscribe = observer.subscribe((result) => { results.push(result) }) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) observer.setOptions({ queryKey: key, queryFn, select, }) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) await observer.refetch() unsubscribe() expect(count).toBe(1) @@ -497,8 +497,9 @@ describe('queryObserver', () => { const unsubscribe = observer.subscribe((result) => { results.push(result) }) - await sleep(50) - await observer.refetch() + await vi.advanceTimersByTimeAsync(50) + observer.refetch() + await vi.advanceTimersByTimeAsync(10) unsubscribe() expect(results[0]).toMatchObject({ status: 'pending', @@ -546,8 +547,9 @@ describe('queryObserver', () => { const unsubscribe = observer.subscribe((result) => { results.push(result) }) - await sleep(50) - await observer.refetch() + await vi.advanceTimersByTimeAsync(50) + observer.refetch() + await vi.advanceTimersByTimeAsync(10) unsubscribe() expect(results[0]).toMatchObject({ @@ -601,7 +603,7 @@ describe('queryObserver', () => { enabled: false, }) const unsubscribe = observer.subscribe(() => undefined) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) unsubscribe() expect(queryFn).toHaveBeenCalledTimes(0) }) @@ -617,7 +619,7 @@ describe('queryObserver', () => { enabled: () => false, }) const unsubscribe = observer.subscribe(() => undefined) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) unsubscribe() expect(queryFn).toHaveBeenCalledTimes(0) }) @@ -628,7 +630,7 @@ describe('queryObserver', () => { .fn<(...args: Array) => string>() .mockReturnValue('data') new QueryObserver(queryClient, { queryKey: key, queryFn }) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) expect(queryFn).toHaveBeenCalledTimes(0) }) @@ -664,7 +666,7 @@ describe('queryObserver', () => { }) observer.setOptions({ queryKey: key, enabled: false, staleTime: 10 }) await queryClient.fetchQuery({ queryKey: key, queryFn }) - await sleep(20) + await vi.advanceTimersByTimeAsync(20) unsubscribe() expect(queryFn).toHaveBeenCalledTimes(1) expect(results.length).toBe(2) @@ -690,7 +692,7 @@ describe('queryObserver', () => { results2.push(x) }) await queryClient.fetchQuery({ queryKey: key, queryFn }) - await sleep(50) + await vi.advanceTimersByTimeAsync(50) unsubscribe1() unsubscribe2() expect(queryFn).toHaveBeenCalledTimes(1) @@ -715,9 +717,9 @@ describe('queryObserver', () => { retryDelay: 50, }) const unsubscribe = observer.subscribe(() => undefined) - await sleep(70) + await vi.advanceTimersByTimeAsync(70) unsubscribe() - await sleep(200) + await vi.advanceTimersByTimeAsync(200) expect(count).toBe(2) }) @@ -737,10 +739,10 @@ describe('queryObserver', () => { }) const unsubscribe = observer.subscribe(() => undefined) expect(count).toBe(1) - await sleep(15) + await vi.advanceTimersByTimeAsync(15) expect(count).toBe(2) unsubscribe() - await sleep(10) + await vi.advanceTimersByTimeAsync(10) expect(queryClient.getQueryCache().find({ queryKey: key })).toBeUndefined() expect(count).toBe(2) }) @@ -764,7 +766,7 @@ describe('queryObserver', () => { results.push(x) }) - await sleep(10) + await vi.advanceTimersByTimeAsync(10) unsubscribe() expect(results.length).toBe(2) @@ -849,7 +851,7 @@ describe('queryObserver', () => { }) const unsubscribe = observer.subscribe(() => undefined) - await sleep(30) + await vi.advanceTimersByTimeAsync(30) expect(queryFn).toHaveBeenCalledTimes(1) @@ -872,7 +874,7 @@ describe('queryObserver', () => { const unsubscribe = observer.subscribe(() => undefined) - await sleep(10) + await vi.advanceTimersByTimeAsync(10) expect(observer.getCurrentResult().data).toBe(data) observer.setOptions({ @@ -949,7 +951,7 @@ describe('queryObserver', () => { results.push(result) }) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) observer.setOptions({ queryKey: key2, @@ -961,7 +963,7 @@ describe('queryObserver', () => { select: (data) => data.value, }) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) unsubscribe() expect(results.length).toBe(4) expect(keys.length).toBe(3) @@ -1016,7 +1018,7 @@ describe('queryObserver', () => { results.push(result) }) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) observer.setOptions({ queryKey: key2, @@ -1028,7 +1030,7 @@ describe('queryObserver', () => { }, }) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) unsubscribe() expect(results.length).toBe(4) @@ -1079,7 +1081,7 @@ describe('queryObserver', () => { results.push(result) }) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) observer.setOptions({ queryKey: key2, @@ -1088,7 +1090,7 @@ describe('queryObserver', () => { select: stableSelect, }) - await sleep(1) + await vi.advanceTimersByTimeAsync(1) unsubscribe() expect(results.length).toBe(4) @@ -1170,8 +1172,8 @@ describe('queryObserver', () => { } }) - await waitFor(() => expect(results[0]?.isStale).toBe(false)) - await waitFor(() => expect(results[1]?.isStale).toBe(true)) + await vi.waitFor(() => expect(results[0]?.isStale).toBe(false)) + await vi.waitFor(() => expect(results[1]?.isStale).toBe(true)) unsubscribe() }) @@ -1195,7 +1197,7 @@ describe('queryObserver', () => { results.push(observer.getCurrentResult()) }) - await waitFor(() => { + await vi.waitFor(() => { expect(results.at(-1)?.data).toBe('data') }) @@ -1228,7 +1230,7 @@ describe('queryObserver', () => { results.push(observer.getCurrentResult()) }) - await waitFor(() => { + await vi.waitFor(() => { expect(results.at(-1)?.status).toBe('error') }) @@ -1240,7 +1242,7 @@ describe('queryObserver', () => { // fail again const lengthBefore = results.length observer.refetch() - await waitFor(() => { + await vi.waitFor(() => { expect(results.length).toBeGreaterThan(lengthBefore) expect(results.at(-1)?.status).toBe('error') }) @@ -1256,7 +1258,7 @@ describe('queryObserver', () => { succeeds = true observer.refetch() - await waitFor(() => { + await vi.waitFor(() => { results.at(-1)?.status === 'success' })