|
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