|
1 | | -import { act, renderHook } from '@testing-library/react'; |
| 1 | +import { act, renderHook, waitFor } from '@testing-library/react'; |
2 | 2 | import { useState } from 'react'; |
3 | 3 | import { afterAll, beforeAll, beforeEach, describe, expect, test, vi } from 'vitest'; |
4 | 4 | import { sleep } from '../../utils/testingHelpers'; |
@@ -425,4 +425,41 @@ describe('useInfiniteScroll', () => { |
425 | 425 |
|
426 | 426 | expect(result.current.error?.message).toBe('error message'); |
427 | 427 | }); |
| 428 | + |
| 429 | + test('reloadAsync should reset data and restart from page=1', async () => { |
| 430 | + const PAGE_SIZE = 2; |
| 431 | + |
| 432 | + // Vitest 的 mock |
| 433 | + const getLoadMoreListMock = vi.fn((page: number, pageSize: number) => { |
| 434 | + const start = (page - 1) * pageSize + 1; |
| 435 | + const list = Array.from({ length: pageSize }, (_, i) => start + i); |
| 436 | + return Promise.resolve({ list }); |
| 437 | + }); |
| 438 | + |
| 439 | + const { result } = renderHook(() => |
| 440 | + useInfiniteScroll((d) => { |
| 441 | + const page = d ? Math.ceil(d.list.length / PAGE_SIZE) + 1 : 1; |
| 442 | + return getLoadMoreListMock(page, PAGE_SIZE); |
| 443 | + }), |
| 444 | + ); |
| 445 | + |
| 446 | + await act(async () => { |
| 447 | + await result.current.loadMoreAsync(); |
| 448 | + }); |
| 449 | + expect(getLoadMoreListMock).toHaveBeenLastCalledWith(1, PAGE_SIZE); |
| 450 | + expect(result.current.data?.list.length).toBe(2); |
| 451 | + |
| 452 | + await act(async () => { |
| 453 | + await result.current.loadMoreAsync(); |
| 454 | + }); |
| 455 | + expect(getLoadMoreListMock).toHaveBeenLastCalledWith(2, PAGE_SIZE); |
| 456 | + expect(result.current.data?.list.length).toBe(4); |
| 457 | + |
| 458 | + await act(async () => { |
| 459 | + await result.current.reloadAsync(); |
| 460 | + }); |
| 461 | + expect(getLoadMoreListMock).toHaveBeenLastCalledWith(1, PAGE_SIZE); |
| 462 | + expect(result.current.data?.list.length).toBe(2); |
| 463 | + expect(result.current.data?.list).toEqual([1, 2]); |
| 464 | + }); |
428 | 465 | }); |
0 commit comments