Files
iotlcm/app/src/pages/message/pagination.test.ts
T

26 lines
1.3 KiB
TypeScript

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('网络失败')
})
})