Skip to content

Commit bd13f01

Browse files
committed
chore: stabilize a flaky test
1 parent d0ea746 commit bd13f01

File tree

1 file changed

+33
-63
lines changed

1 file changed

+33
-63
lines changed

packages/react-query/src/__tests__/useInfiniteQuery.test.tsx

Lines changed: 33 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -598,77 +598,47 @@ describe('useInfiniteQuery', () => {
598598

599599
it('should silently cancel any ongoing fetch when fetching more', async () => {
600600
const key = queryKey()
601-
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []
602601

603602
function Page() {
604603
const start = 10
605-
const state = useInfiniteQuery({
606-
queryKey: key,
607-
queryFn: async ({ pageParam }) => {
608-
await sleep(50)
609-
return Number(pageParam)
610-
},
611-
defaultPageParam: start,
612-
getNextPageParam: (lastPage) => lastPage + 1,
613-
notifyOnChangeProps: 'all',
614-
})
615-
616-
states.push(state)
617-
618-
const { refetch, fetchNextPage } = state
619-
620-
React.useEffect(() => {
621-
setActTimeout(() => {
622-
refetch()
623-
}, 100)
624-
setActTimeout(() => {
625-
fetchNextPage()
626-
}, 110)
627-
}, [fetchNextPage, refetch])
604+
const { data, fetchNextPage, refetch, status, fetchStatus } =
605+
useInfiniteQuery({
606+
queryKey: key,
607+
queryFn: async ({ pageParam }) => {
608+
await sleep(50)
609+
return Number(pageParam)
610+
},
611+
defaultPageParam: start,
612+
getNextPageParam: (lastPage) => lastPage + 1,
613+
})
628614

629-
return null
615+
return (
616+
<div>
617+
<button onClick={() => fetchNextPage()}>fetchNextPage</button>
618+
<button onClick={() => refetch()}>refetch</button>
619+
<div>data: {JSON.stringify(data)}</div>
620+
<div>
621+
status: {status}, {fetchStatus}
622+
</div>
623+
</div>
624+
)
630625
}
631626

632-
renderWithClient(queryClient, <Page />)
627+
const rendered = renderWithClient(queryClient, <Page />)
633628

634-
await sleep(300)
629+
await waitFor(() => rendered.getByText('status: success, idle'))
630+
await waitFor(() =>
631+
rendered.getByText('data: {"pages":[10],"pageParams":[10]}'),
632+
)
635633

636-
expect(states.length).toBe(5)
637-
expect(states[0]).toMatchObject({
638-
hasNextPage: false,
639-
data: undefined,
640-
isFetching: true,
641-
isFetchingNextPage: false,
642-
isSuccess: false,
643-
})
644-
expect(states[1]).toMatchObject({
645-
hasNextPage: true,
646-
data: { pages: [10] },
647-
isFetching: false,
648-
isFetchingNextPage: false,
649-
isSuccess: true,
650-
})
651-
expect(states[2]).toMatchObject({
652-
hasNextPage: true,
653-
data: { pages: [10] },
654-
isFetching: true,
655-
isFetchingNextPage: false,
656-
isSuccess: true,
657-
})
658-
expect(states[3]).toMatchObject({
659-
hasNextPage: true,
660-
data: { pages: [10] },
661-
isFetching: true,
662-
isFetchingNextPage: true,
663-
isSuccess: true,
664-
})
665-
expect(states[4]).toMatchObject({
666-
hasNextPage: true,
667-
data: { pages: [10, 11] },
668-
isFetching: false,
669-
isFetchingNextPage: false,
670-
isSuccess: true,
671-
})
634+
fireEvent.click(rendered.getByRole('button', { name: /refetch/i }))
635+
await waitFor(() => rendered.getByText('status: success, fetching'))
636+
fireEvent.click(rendered.getByRole('button', { name: /fetchNextPage/i }))
637+
638+
await waitFor(() => rendered.getByText('status: success, idle'))
639+
await waitFor(() =>
640+
rendered.getByText('data: {"pages":[10,11],"pageParams":[10,11]}'),
641+
)
672642
})
673643

674644
it('should silently cancel an ongoing fetchNextPage request when another fetchNextPage is invoked', async () => {

0 commit comments

Comments
 (0)