DataTablePagination.test.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { render, screen, fireEvent } from '@testing-library/react';
  2. import { describe, it, expect, vi } from 'vitest';
  3. import { DataTablePagination } from '../../src/components/admin/DataTablePagination';
  4. describe('DataTablePagination', () => {
  5. it('应该正确渲染分页组件', () => {
  6. const mockOnPageChange = vi.fn();
  7. render(
  8. <DataTablePagination
  9. currentPage={1}
  10. totalCount={100}
  11. pageSize={10}
  12. onPageChange={mockOnPageChange}
  13. />
  14. );
  15. // 检查分页组件是否渲染
  16. expect(screen.getByRole('navigation')).toBeInTheDocument();
  17. // 检查分页信息是否正确显示
  18. expect(screen.getByText('共 100 条记录,第 1 / 10 页')).toBeInTheDocument();
  19. // 检查页码是否正确显示
  20. expect(screen.getByText('1')).toBeInTheDocument();
  21. expect(screen.getByText('10')).toBeInTheDocument();
  22. });
  23. it('应该处理页码点击', () => {
  24. const mockOnPageChange = vi.fn();
  25. render(
  26. <DataTablePagination
  27. currentPage={1}
  28. totalCount={100}
  29. pageSize={10}
  30. onPageChange={mockOnPageChange}
  31. />
  32. );
  33. // 点击下一页
  34. const nextButton = screen.getByLabelText(/next/i);
  35. fireEvent.click(nextButton);
  36. expect(mockOnPageChange).toHaveBeenCalledWith(2, 10);
  37. });
  38. it('应该禁用上一页按钮当在第一页时', () => {
  39. const mockOnPageChange = vi.fn();
  40. render(
  41. <DataTablePagination
  42. currentPage={1}
  43. totalCount={100}
  44. pageSize={10}
  45. onPageChange={mockOnPageChange}
  46. />
  47. );
  48. const prevButton = screen.getByLabelText(/previous/i);
  49. expect(prevButton).toHaveAttribute('aria-disabled', 'true');
  50. });
  51. it('应该禁用下一页按钮当在最后一页时', () => {
  52. const mockOnPageChange = vi.fn();
  53. render(
  54. <DataTablePagination
  55. currentPage={10}
  56. totalCount={100}
  57. pageSize={10}
  58. onPageChange={mockOnPageChange}
  59. />
  60. );
  61. const nextButton = screen.getByLabelText(/next/i);
  62. expect(nextButton).toHaveAttribute('aria-disabled', 'true');
  63. });
  64. });