2
0

dashboard.test.tsx 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import { describe, it, expect, vi, beforeEach } from 'vitest';
  2. import { render, screen, waitFor } from '@testing-library/react';
  3. import userEvent from '@testing-library/user-event';
  4. import { DashboardPage } from '@/client/admin/pages/Dashboard';
  5. // Mock 导航功能
  6. const mockNavigate = vi.fn();
  7. vi.mock('react-router', () => ({
  8. useNavigate: () => mockNavigate,
  9. }));
  10. describe('DashboardPage 集成测试', () => {
  11. beforeEach(() => {
  12. vi.clearAllMocks();
  13. });
  14. it('应该正确渲染核心指标卡片', async () => {
  15. render(<DashboardPage />);
  16. // 验证统计卡片显示
  17. expect(screen.getByText('活跃用户')).toBeInTheDocument();
  18. expect(screen.getByText('112,893')).toBeInTheDocument();
  19. expect(screen.getByText('较昨日增长 12.5%')).toBeInTheDocument();
  20. expect(screen.getByText('系统消息')).toBeInTheDocument();
  21. expect(screen.getByText('93')).toBeInTheDocument();
  22. expect(screen.getByText('在线用户')).toBeInTheDocument();
  23. expect(screen.getByText('1,128')).toBeInTheDocument();
  24. });
  25. it('应该正确渲染系统性能指标', async () => {
  26. render(<DashboardPage />);
  27. // 验证系统性能部分
  28. expect(screen.getByText('系统性能')).toBeInTheDocument();
  29. expect(screen.getByText('当前系统各项资源的使用情况')).toBeInTheDocument();
  30. expect(screen.getByText('CPU使用率')).toBeInTheDocument();
  31. expect(screen.getByText('65%')).toBeInTheDocument();
  32. expect(screen.getByText('内存使用率')).toBeInTheDocument();
  33. expect(screen.getByText('78%')).toBeInTheDocument();
  34. expect(screen.getByText('磁盘使用率')).toBeInTheDocument();
  35. expect(screen.getByText('45%')).toBeInTheDocument();
  36. expect(screen.getByText('网络使用率')).toBeInTheDocument();
  37. expect(screen.getByText('32%')).toBeInTheDocument();
  38. });
  39. it('应该正确渲染最近活动列表', async () => {
  40. render(<DashboardPage />);
  41. // 验证最近活动部分
  42. expect(screen.getByText('最近活动')).toBeInTheDocument();
  43. expect(screen.getByText('系统最新操作记录')).toBeInTheDocument();
  44. expect(screen.getByText('张三 登录系统')).toBeInTheDocument();
  45. expect(screen.getByText('2分钟前')).toBeInTheDocument();
  46. expect(screen.getByText('李四 创建了新用户')).toBeInTheDocument();
  47. expect(screen.getByText('5分钟前')).toBeInTheDocument();
  48. expect(screen.getByText('王五 删除了用户')).toBeInTheDocument();
  49. expect(screen.getByText('10分钟前')).toBeInTheDocument();
  50. expect(screen.getByText('赵六 修改了配置')).toBeInTheDocument();
  51. expect(screen.getByText('15分钟前')).toBeInTheDocument();
  52. });
  53. it('应该正确渲染快捷操作卡片', async () => {
  54. render(<DashboardPage />);
  55. // 验证快捷操作部分
  56. expect(screen.getByText('快捷操作')).toBeInTheDocument();
  57. expect(screen.getByText('常用的管理功能')).toBeInTheDocument();
  58. expect(screen.getByText('用户管理')).toBeInTheDocument();
  59. expect(screen.getByText('查看和管理所有用户')).toBeInTheDocument();
  60. expect(screen.getByText('系统设置')).toBeInTheDocument();
  61. expect(screen.getByText('配置系统参数')).toBeInTheDocument();
  62. expect(screen.getByText('数据备份')).toBeInTheDocument();
  63. expect(screen.getByText('执行数据备份操作')).toBeInTheDocument();
  64. expect(screen.getByText('日志查看')).toBeInTheDocument();
  65. expect(screen.getByText('查看系统日志')).toBeInTheDocument();
  66. });
  67. it('应该正确渲染页面标题和描述', async () => {
  68. render(<DashboardPage />);
  69. expect(screen.getByText('仪表盘')).toBeInTheDocument();
  70. expect(screen.getByText('欢迎回来!这里是系统概览和关键指标。')).toBeInTheDocument();
  71. });
  72. it('应该具有正确的响应式布局类名', async () => {
  73. const { container } = render(<DashboardPage />);
  74. // 验证网格布局类名
  75. const gridElements = container.querySelectorAll('.grid');
  76. expect(gridElements.length).toBeGreaterThan(0);
  77. // 验证响应式类名存在 - 使用更宽松的检查
  78. const hasResponsiveClasses = container.innerHTML.includes('md:grid-cols-2') ||
  79. container.innerHTML.includes('lg:grid-cols-3');
  80. expect(hasResponsiveClasses).toBe(true);
  81. });
  82. it('应该包含正确的图标和视觉元素', async () => {
  83. render(<DashboardPage />);
  84. // 验证卡片标题存在
  85. expect(screen.getByText('活跃用户')).toBeInTheDocument();
  86. expect(screen.getByText('系统消息')).toBeInTheDocument();
  87. expect(screen.getByText('在线用户')).toBeInTheDocument();
  88. // 验证进度条存在 - 使用更通用的检查
  89. const progressElements = document.querySelectorAll('[role="progressbar"]');
  90. expect(progressElements.length).toBeGreaterThan(0);
  91. });
  92. });