From 73eb440a6f8da87336c172f950b2c12e03ed5655 Mon Sep 17 00:00:00 2001 From: Jonghyeon Ko Date: Mon, 7 Apr 2025 01:18:11 +0900 Subject: [PATCH 1/3] test(query-core): use fakeTimers for infiniteQueryBehavior.test.tsx --- .../__tests__/infiniteQueryBehavior.test.tsx | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx index 13f57f9064..6bd3eb84f9 100644 --- a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx +++ b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx @@ -1,5 +1,4 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' -import { waitFor } from '@testing-library/dom' import { CancelledError, InfiniteQueryObserver } from '..' import { createQueryClient, queryKey, sleep } from './utils' import type { @@ -14,6 +13,7 @@ describe('InfiniteQueryBehavior', () => { let queryCache: QueryCache beforeEach(() => { + vi.useFakeTimers() queryClient = createQueryClient() queryCache = queryClient.getQueryCache() queryClient.mount() @@ -21,6 +21,7 @@ describe('InfiniteQueryBehavior', () => { afterEach(() => { queryClient.clear() + vi.useRealTimers() }) test('InfiniteQueryBehavior should throw an error if the queryFn is not defined', async () => { @@ -41,7 +42,7 @@ describe('InfiniteQueryBehavior', () => { observerResult = result }) - await waitFor(() => { + await vi.waitFor(() => { const query = queryCache.find({ queryKey: key })! return expect(observerResult).toMatchObject({ isError: true, @@ -79,7 +80,7 @@ describe('InfiniteQueryBehavior', () => { }) // Wait for the first page to be fetched - await waitFor(() => + await vi.waitFor(() => expect(observerResult).toMatchObject({ isFetching: false, data: { pages: [1], pageParams: [1] }, @@ -231,7 +232,7 @@ describe('InfiniteQueryBehavior', () => { query.cancel() // Wait for the first page to be cancelled - await waitFor(() => + await vi.waitFor(() => expect(observerResult).toMatchObject({ isFetching: false, isError: true, @@ -280,7 +281,7 @@ describe('InfiniteQueryBehavior', () => { }) // Wait for the first page to be fetched - await waitFor(() => + await vi.waitFor(() => expect(observerResult).toMatchObject({ isFetching: false, data: { pages: [1], pageParams: [1] }, @@ -385,25 +386,32 @@ describe('InfiniteQueryBehavior', () => { }) // Fetch Page 1 - const page1Data = await observer.fetchNextPage() - expect(page1Data.data?.pageParams).toEqual([1]) + await vi.waitFor(async () => { + const page1Data = await observer.fetchNextPage() + expect(page1Data.data?.pageParams).toEqual([1]) + }) // Fetch Page 2, as per the queryFn, this will reject 2 times then resolves - const page2Data = await observer.fetchNextPage() - expect(page2Data.data?.pageParams).toEqual([1, 2]) + await vi.waitFor(async () => { + const page2Data = await observer.fetchNextPage() + expect(page2Data.data?.pageParams).toEqual([1, 2]) + }) // Fetch Page 3 - const page3Data = await observer.fetchNextPage() - expect(page3Data.data?.pageParams).toEqual([1, 2, 3]) + await vi.waitFor(async () => { + const page3Data = await observer.fetchNextPage() + expect(page3Data.data?.pageParams).toEqual([1, 2, 3]) + }) // Now the real deal; re-fetching this query **should not** stamp into an // infinite loop where the retryer every time restarts from page 1 // once it reaches the page where it errors. // For this to work, we'd need to reset the error count so we actually retry errorCount = 0 - const reFetchedData = await observer.refetch() - - expect(reFetchedData.data?.pageParams).toEqual([1, 2, 3]) + await vi.waitFor(async () => { + const reFetchedData = await observer.refetch() + expect(reFetchedData.data?.pageParams).toEqual([1, 2, 3]) + }) }) test('should fetch even if initialPageParam is null', async () => { @@ -424,7 +432,7 @@ describe('InfiniteQueryBehavior', () => { observerResult = result }) - await waitFor(() => + await vi.waitFor(() => expect(observerResult).toMatchObject({ isFetching: false, data: { pages: ['data'], pageParams: [null] }, From f4f525aa4fcc689f2f9acefa93d95dcfbefe71d0 Mon Sep 17 00:00:00 2001 From: Jonghyeon Ko Date: Mon, 7 Apr 2025 01:20:36 +0900 Subject: [PATCH 2/3] chore: update --- .../__tests__/infiniteQueryBehavior.test.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx index 6bd3eb84f9..b5843b5a8b 100644 --- a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx +++ b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx @@ -386,20 +386,20 @@ describe('InfiniteQueryBehavior', () => { }) // Fetch Page 1 - await vi.waitFor(async () => { - const page1Data = await observer.fetchNextPage() - expect(page1Data.data?.pageParams).toEqual([1]) + const page1Data = await observer.fetchNextPage() + await vi.waitFor(() => { + expect(page1Data.data?.pageParams).toEqual([1, 2]) }) // Fetch Page 2, as per the queryFn, this will reject 2 times then resolves - await vi.waitFor(async () => { - const page2Data = await observer.fetchNextPage() + const page2Data = await observer.fetchNextPage() + await vi.waitFor(() => { expect(page2Data.data?.pageParams).toEqual([1, 2]) }) // Fetch Page 3 - await vi.waitFor(async () => { - const page3Data = await observer.fetchNextPage() + const page3Data = await observer.fetchNextPage() + await vi.waitFor(() => { expect(page3Data.data?.pageParams).toEqual([1, 2, 3]) }) @@ -408,8 +408,8 @@ describe('InfiniteQueryBehavior', () => { // once it reaches the page where it errors. // For this to work, we'd need to reset the error count so we actually retry errorCount = 0 - await vi.waitFor(async () => { - const reFetchedData = await observer.refetch() + const reFetchedData = await observer.refetch() + await vi.waitFor(() => { expect(reFetchedData.data?.pageParams).toEqual([1, 2, 3]) }) }) From 9bb648bf6fc1f8d40ca355466d69932cd3bfed7b Mon Sep 17 00:00:00 2001 From: Jonghyeon Ko Date: Mon, 7 Apr 2025 07:44:41 +0900 Subject: [PATCH 3/3] chore: reflect review --- .../__tests__/infiniteQueryBehavior.test.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx index b5843b5a8b..6bd3eb84f9 100644 --- a/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx +++ b/packages/query-core/src/__tests__/infiniteQueryBehavior.test.tsx @@ -386,20 +386,20 @@ describe('InfiniteQueryBehavior', () => { }) // Fetch Page 1 - const page1Data = await observer.fetchNextPage() - await vi.waitFor(() => { - expect(page1Data.data?.pageParams).toEqual([1, 2]) + await vi.waitFor(async () => { + const page1Data = await observer.fetchNextPage() + expect(page1Data.data?.pageParams).toEqual([1]) }) // Fetch Page 2, as per the queryFn, this will reject 2 times then resolves - const page2Data = await observer.fetchNextPage() - await vi.waitFor(() => { + await vi.waitFor(async () => { + const page2Data = await observer.fetchNextPage() expect(page2Data.data?.pageParams).toEqual([1, 2]) }) // Fetch Page 3 - const page3Data = await observer.fetchNextPage() - await vi.waitFor(() => { + await vi.waitFor(async () => { + const page3Data = await observer.fetchNextPage() expect(page3Data.data?.pageParams).toEqual([1, 2, 3]) }) @@ -408,8 +408,8 @@ describe('InfiniteQueryBehavior', () => { // once it reaches the page where it errors. // For this to work, we'd need to reset the error count so we actually retry errorCount = 0 - const reFetchedData = await observer.refetch() - await vi.waitFor(() => { + await vi.waitFor(async () => { + const reFetchedData = await observer.refetch() expect(reFetchedData.data?.pageParams).toEqual([1, 2, 3]) }) })