import type { AppMessage } from '@/api/message' import { describe, expect, it, vi } from 'vitest' import { collectMessagePages } from './pagination' function item(id: number): AppMessage { return { id, messageId: id, messageLogId: id, messageType: 1, title: '通知', content: '', isRead: 0 } } describe('消息分页完整性', () => { it('超过 100 条仍能加载完整列表', async () => { const fetch = vi.fn().mockResolvedValueOnce({ items: Array.from({ length: 100 }, (_, i) => item(i + 1)), total: 101 }).mockResolvedValueOnce({ items: [item(101)], total: 101 }) expect((await collectMessagePages(fetch))?.length).toBe(101) expect(fetch).toHaveBeenCalledTimes(2) }) it('过期请求不返回旧数据', async () => { expect(await collectMessagePages(vi.fn().mockResolvedValue({ items: [item(1)], total: 1 }), {}, () => false)).toBeNull() }) it('重复分页不造成无限加载', async () => { const fetch = vi.fn().mockResolvedValue({ items: Array.from({ length: 100 }, (_, i) => item(i + 1)), total: 300 }) await expect(collectMessagePages(fetch)).rejects.toThrow('分页未前进') }) it('分页失败向调用者传播,不假装加载完整', async () => { await expect(collectMessagePages(vi.fn().mockRejectedValue(new Error('网络失败')))).rejects.toThrow('网络失败') }) })