dashboard.test.tsx 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. import { describe, it, expect, vi, beforeEach } from 'vitest';
  2. import { render, screen } from '@testing-library/react';
  3. import userEvent from '@testing-library/user-event';
  4. import '@testing-library/jest-dom';
  5. import { DashboardPage } from '../../../../src/client/admin/pages/Dashboard';
  6. // Mock 导航功能
  7. const mockNavigate = vi.fn();
  8. vi.mock('react-router', () => ({
  9. useNavigate: () => mockNavigate,
  10. }));
  11. describe('DashboardPage 集成测试', () => {
  12. beforeEach(() => {
  13. vi.clearAllMocks();
  14. });
  15. it('应该正确渲染核心指标卡片', async () => {
  16. render(<DashboardPage />);
  17. // 验证统计卡片显示
  18. expect(screen.getByText('活跃用户')).toBeInTheDocument();
  19. expect(screen.getByText('112,893')).toBeInTheDocument();
  20. expect(screen.getByText('较昨日增长 12.5%')).toBeInTheDocument();
  21. expect(screen.getByText('系统消息')).toBeInTheDocument();
  22. expect(screen.getByText('93')).toBeInTheDocument();
  23. expect(screen.getByText('在线用户')).toBeInTheDocument();
  24. expect(screen.getByText('1,128')).toBeInTheDocument();
  25. });
  26. it('应该正确渲染系统性能指标', async () => {
  27. render(<DashboardPage />);
  28. // 验证系统性能部分
  29. expect(screen.getByText('系统性能')).toBeInTheDocument();
  30. expect(screen.getByText('当前系统各项资源的使用情况')).toBeInTheDocument();
  31. expect(screen.getByText('CPU使用率')).toBeInTheDocument();
  32. expect(screen.getByText('65%')).toBeInTheDocument();
  33. expect(screen.getByText('内存使用率')).toBeInTheDocument();
  34. expect(screen.getByText('78%')).toBeInTheDocument();
  35. expect(screen.getByText('磁盘使用率')).toBeInTheDocument();
  36. expect(screen.getByText('45%')).toBeInTheDocument();
  37. expect(screen.getByText('网络使用率')).toBeInTheDocument();
  38. expect(screen.getByText('32%')).toBeInTheDocument();
  39. });
  40. it('应该正确渲染最近活动列表', async () => {
  41. render(<DashboardPage />);
  42. // 验证最近活动部分
  43. expect(screen.getByText('最近活动')).toBeInTheDocument();
  44. expect(screen.getByText('系统最新操作记录')).toBeInTheDocument();
  45. expect(screen.getByText('张三 登录系统')).toBeInTheDocument();
  46. expect(screen.getByText('2分钟前')).toBeInTheDocument();
  47. expect(screen.getByText('李四 创建了新用户')).toBeInTheDocument();
  48. expect(screen.getByText('5分钟前')).toBeInTheDocument();
  49. expect(screen.getByText('王五 删除了用户')).toBeInTheDocument();
  50. expect(screen.getByText('10分钟前')).toBeInTheDocument();
  51. expect(screen.getByText('赵六 修改了配置')).toBeInTheDocument();
  52. expect(screen.getByText('15分钟前')).toBeInTheDocument();
  53. });
  54. it('应该正确渲染快捷操作卡片', async () => {
  55. render(<DashboardPage />);
  56. // 验证快捷操作部分
  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. expect(screen.getByText('查看系统日志')).toBeInTheDocument();
  67. });
  68. it('应该正确渲染页面标题和描述', async () => {
  69. render(<DashboardPage />);
  70. expect(screen.getByText('仪表盘')).toBeInTheDocument();
  71. expect(screen.getByText('欢迎回来!这里是系统概览和关键指标。')).toBeInTheDocument();
  72. });
  73. it('应该具有正确的响应式布局类名', async () => {
  74. const { container } = render(<DashboardPage />);
  75. // 验证网格布局类名
  76. const gridElements = container.querySelectorAll('.grid');
  77. expect(gridElements.length).toBeGreaterThan(0);
  78. // 验证响应式类名存在 - 使用更宽松的检查
  79. const hasResponsiveClasses = container.innerHTML.includes('md:grid-cols-2') ||
  80. container.innerHTML.includes('lg:grid-cols-3');
  81. expect(hasResponsiveClasses).toBe(true);
  82. });
  83. it('应该包含正确的图标和视觉元素', async () => {
  84. render(<DashboardPage />);
  85. // 验证卡片标题存在
  86. expect(screen.getByText('活跃用户')).toBeInTheDocument();
  87. expect(screen.getByText('系统消息')).toBeInTheDocument();
  88. expect(screen.getByText('在线用户')).toBeInTheDocument();
  89. // 验证进度条存在 - 使用更通用的检查
  90. const progressElements = document.querySelectorAll('[role="progressbar"]');
  91. expect(progressElements.length).toBeGreaterThan(0);
  92. });
  93. it('应该正确处理快捷操作导航', async () => {
  94. const user = userEvent.setup();
  95. render(<DashboardPage />);
  96. // 验证快捷操作卡片存在
  97. expect(screen.getByText('用户管理')).toBeInTheDocument();
  98. expect(screen.getByText('系统设置')).toBeInTheDocument();
  99. expect(screen.getByText('数据备份')).toBeInTheDocument();
  100. expect(screen.getByText('日志查看')).toBeInTheDocument();
  101. // 点击用户管理卡片
  102. const userManagementCard = screen.getByText('用户管理').closest('.cursor-pointer');
  103. await user.click(userManagementCard!);
  104. expect(mockNavigate).toHaveBeenCalledWith('/admin/users');
  105. // 点击系统设置卡片
  106. const settingsCard = screen.getByText('系统设置').closest('.cursor-pointer');
  107. await user.click(settingsCard!);
  108. expect(mockNavigate).toHaveBeenCalledWith('/admin/settings');
  109. // 点击数据备份卡片
  110. const backupCard = screen.getByText('数据备份').closest('.cursor-pointer');
  111. await user.click(backupCard!);
  112. expect(mockNavigate).toHaveBeenCalledWith('/admin/backup');
  113. // 点击日志查看卡片
  114. const logsCard = screen.getByText('日志查看').closest('.cursor-pointer');
  115. await user.click(logsCard!);
  116. expect(mockNavigate).toHaveBeenCalledWith('/admin/logs');
  117. });
  118. it('应该正确渲染所有导航元素', async () => {
  119. render(<DashboardPage />);
  120. // 验证所有快捷操作卡片都包含正确的描述
  121. expect(screen.getByText('查看和管理所有用户')).toBeInTheDocument();
  122. expect(screen.getByText('配置系统参数')).toBeInTheDocument();
  123. expect(screen.getByText('执行数据备份操作')).toBeInTheDocument();
  124. expect(screen.getByText('查看系统日志')).toBeInTheDocument();
  125. // 验证快捷操作区域存在
  126. const quickActionSection = screen.getByText('快捷操作');
  127. expect(quickActionSection).toBeInTheDocument();
  128. // 验证快捷操作卡片标题存在
  129. expect(screen.getByText('用户管理')).toBeInTheDocument();
  130. expect(screen.getByText('系统设置')).toBeInTheDocument();
  131. expect(screen.getByText('数据备份')).toBeInTheDocument();
  132. expect(screen.getByText('日志查看')).toBeInTheDocument();
  133. });
  134. });