|
1 | | -import { describe, expect, it, vi } from 'vitest' |
| 1 | +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' |
2 | 2 | import React from 'react' |
3 | | -import { fireEvent, waitFor } from '@testing-library/react' |
| 3 | +import { act, fireEvent } from '@testing-library/react' |
4 | 4 | import { queryKey, sleep } from '@tanstack/query-test-utils' |
5 | 5 | import { |
6 | 6 | QueryCache, |
@@ -40,6 +40,14 @@ const generateInfiniteQueryOptions = ( |
40 | 40 | } |
41 | 41 |
|
42 | 42 | describe('usePrefetchInfiniteQuery', () => { |
| 43 | + beforeEach(() => { |
| 44 | + vi.useFakeTimers() |
| 45 | + }) |
| 46 | + |
| 47 | + afterEach(() => { |
| 48 | + vi.useRealTimers() |
| 49 | + }) |
| 50 | + |
43 | 51 | const queryCache = new QueryCache() |
44 | 52 | const queryClient = new QueryClient({ queryCache }) |
45 | 53 |
|
@@ -98,20 +106,19 @@ describe('usePrefetchInfiniteQuery', () => { |
98 | 106 |
|
99 | 107 | const rendered = renderWithClient(queryClient, <App />) |
100 | 108 |
|
101 | | - await waitFor(() => rendered.getByText('data: Do you fetch on render?')) |
| 109 | + await act(() => vi.advanceTimersByTimeAsync(31)) |
| 110 | + rendered.getByText('data: Do you fetch on render?') |
102 | 111 | fireEvent.click(rendered.getByText('Next Page')) |
103 | | - await waitFor(() => |
104 | | - rendered.getByText('data: Or do you render as you fetch?'), |
105 | | - ) |
| 112 | + rendered.getByText('data: Or do you render as you fetch?') |
106 | 113 | fireEvent.click(rendered.getByText('Next Page')) |
107 | | - await waitFor(() => |
108 | | - rendered.getByText('data: Either way, Tanstack Query helps you!'), |
109 | | - ) |
| 114 | + rendered.getByText('data: Either way, Tanstack Query helps you!') |
110 | 115 | expect(Fallback).toHaveBeenCalledTimes(1) |
111 | 116 | expect(queryOpts.queryFn).toHaveBeenCalledTimes(3) |
112 | 117 | }) |
113 | 118 |
|
114 | 119 | it('should not display fallback if the query cache is already populated', async () => { |
| 120 | + vi.useRealTimers() |
| 121 | + |
115 | 122 | const queryOpts = { |
116 | 123 | queryKey: queryKey(), |
117 | 124 | ...generateInfiniteQueryOptions([ |
@@ -139,11 +146,11 @@ describe('usePrefetchInfiniteQuery', () => { |
139 | 146 |
|
140 | 147 | const rendered = renderWithClient(queryClient, <App />) |
141 | 148 |
|
142 | | - await waitFor(() => rendered.getByText('data: Prefetch rocks!')) |
| 149 | + rendered.getByText('data: Prefetch rocks!') |
143 | 150 | fireEvent.click(rendered.getByText('Next Page')) |
144 | | - await waitFor(() => rendered.getByText('data: No waterfalls, boy!')) |
| 151 | + rendered.getByText('data: No waterfalls, boy!') |
145 | 152 | fireEvent.click(rendered.getByText('Next Page')) |
146 | | - await waitFor(() => rendered.getByText('data: Tanstack Query #ftw')) |
| 153 | + rendered.getByText('data: Tanstack Query #ftw') |
147 | 154 | expect(queryOpts.queryFn).not.toHaveBeenCalled() |
148 | 155 | expect(Fallback).not.toHaveBeenCalled() |
149 | 156 | }) |
@@ -177,11 +184,15 @@ describe('usePrefetchInfiniteQuery', () => { |
177 | 184 | } |
178 | 185 |
|
179 | 186 | const rendered = renderWithClient(queryClient, <App />) |
180 | | - await waitFor(() => rendered.getByText('data: Infinite Page 1')) |
| 187 | + |
| 188 | + await act(() => vi.advanceTimersByTimeAsync(11)) |
| 189 | + rendered.getByText('data: Infinite Page 1') |
181 | 190 | fireEvent.click(rendered.getByText('Next Page')) |
182 | | - await waitFor(() => rendered.getByText('data: Infinite Page 2')) |
| 191 | + await vi.advanceTimersByTimeAsync(11) |
| 192 | + rendered.getByText('data: Infinite Page 2') |
183 | 193 | fireEvent.click(rendered.getByText('Next Page')) |
184 | | - await waitFor(() => rendered.getByText('data: Infinite Page 3')) |
| 194 | + await vi.advanceTimersByTimeAsync(11) |
| 195 | + rendered.getByText('data: Infinite Page 3') |
185 | 196 | expect(queryOpts.queryFn).toHaveBeenCalledTimes(3) |
186 | 197 | }) |
187 | 198 | }) |
0 commit comments