| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- import { describe, it, expect, vi, beforeEach } from 'vitest';
- import { render, screen } from '@testing-library/react';
- import userEvent from '@testing-library/user-event';
- import '@testing-library/jest-dom';
- import { DashboardPage } from '../../../../src/client/admin/pages/Dashboard';
- // Mock 导航功能
- const mockNavigate = vi.fn();
- vi.mock('react-router', () => ({
- useNavigate: () => mockNavigate,
- }));
- describe('DashboardPage 集成测试', () => {
- beforeEach(() => {
- vi.clearAllMocks();
- });
- it('应该正确渲染核心指标卡片', async () => {
- render(<DashboardPage />);
- // 验证统计卡片显示
- expect(screen.getByText('活跃用户')).toBeInTheDocument();
- expect(screen.getByText('112,893')).toBeInTheDocument();
- expect(screen.getByText('较昨日增长 12.5%')).toBeInTheDocument();
- expect(screen.getByText('系统消息')).toBeInTheDocument();
- expect(screen.getByText('93')).toBeInTheDocument();
- expect(screen.getByText('在线用户')).toBeInTheDocument();
- expect(screen.getByText('1,128')).toBeInTheDocument();
- });
- it('应该正确渲染系统性能指标', async () => {
- render(<DashboardPage />);
- // 验证系统性能部分
- expect(screen.getByText('系统性能')).toBeInTheDocument();
- expect(screen.getByText('当前系统各项资源的使用情况')).toBeInTheDocument();
- expect(screen.getByText('CPU使用率')).toBeInTheDocument();
- expect(screen.getByText('65%')).toBeInTheDocument();
- expect(screen.getByText('内存使用率')).toBeInTheDocument();
- expect(screen.getByText('78%')).toBeInTheDocument();
- expect(screen.getByText('磁盘使用率')).toBeInTheDocument();
- expect(screen.getByText('45%')).toBeInTheDocument();
- expect(screen.getByText('网络使用率')).toBeInTheDocument();
- expect(screen.getByText('32%')).toBeInTheDocument();
- });
- it('应该正确渲染最近活动列表', async () => {
- render(<DashboardPage />);
- // 验证最近活动部分
- expect(screen.getByText('最近活动')).toBeInTheDocument();
- expect(screen.getByText('系统最新操作记录')).toBeInTheDocument();
- expect(screen.getByText('张三 登录系统')).toBeInTheDocument();
- expect(screen.getByText('2分钟前')).toBeInTheDocument();
- expect(screen.getByText('李四 创建了新用户')).toBeInTheDocument();
- expect(screen.getByText('5分钟前')).toBeInTheDocument();
- expect(screen.getByText('王五 删除了用户')).toBeInTheDocument();
- expect(screen.getByText('10分钟前')).toBeInTheDocument();
- expect(screen.getByText('赵六 修改了配置')).toBeInTheDocument();
- expect(screen.getByText('15分钟前')).toBeInTheDocument();
- });
- it('应该正确渲染快捷操作卡片', async () => {
- render(<DashboardPage />);
- // 验证快捷操作部分
- expect(screen.getByText('快捷操作')).toBeInTheDocument();
- expect(screen.getByText('常用的管理功能')).toBeInTheDocument();
- expect(screen.getByText('用户管理')).toBeInTheDocument();
- expect(screen.getByText('查看和管理所有用户')).toBeInTheDocument();
- expect(screen.getByText('系统设置')).toBeInTheDocument();
- expect(screen.getByText('配置系统参数')).toBeInTheDocument();
- expect(screen.getByText('数据备份')).toBeInTheDocument();
- expect(screen.getByText('执行数据备份操作')).toBeInTheDocument();
- expect(screen.getByText('日志查看')).toBeInTheDocument();
- expect(screen.getByText('查看系统日志')).toBeInTheDocument();
- });
- it('应该正确渲染页面标题和描述', async () => {
- render(<DashboardPage />);
- expect(screen.getByText('仪表盘')).toBeInTheDocument();
- expect(screen.getByText('欢迎回来!这里是系统概览和关键指标。')).toBeInTheDocument();
- });
- it('应该具有正确的响应式布局类名', async () => {
- const { container } = render(<DashboardPage />);
- // 验证网格布局类名
- const gridElements = container.querySelectorAll('.grid');
- expect(gridElements.length).toBeGreaterThan(0);
- // 验证响应式类名存在 - 使用更宽松的检查
- const hasResponsiveClasses = container.innerHTML.includes('md:grid-cols-2') ||
- container.innerHTML.includes('lg:grid-cols-3');
- expect(hasResponsiveClasses).toBe(true);
- });
- it('应该包含正确的图标和视觉元素', async () => {
- render(<DashboardPage />);
- // 验证卡片标题存在
- expect(screen.getByText('活跃用户')).toBeInTheDocument();
- expect(screen.getByText('系统消息')).toBeInTheDocument();
- expect(screen.getByText('在线用户')).toBeInTheDocument();
- // 验证进度条存在 - 使用更通用的检查
- const progressElements = document.querySelectorAll('[role="progressbar"]');
- expect(progressElements.length).toBeGreaterThan(0);
- });
- it('应该正确处理快捷操作导航', async () => {
- const user = userEvent.setup();
- render(<DashboardPage />);
- // 验证快捷操作卡片存在
- expect(screen.getByText('用户管理')).toBeInTheDocument();
- expect(screen.getByText('系统设置')).toBeInTheDocument();
- expect(screen.getByText('数据备份')).toBeInTheDocument();
- expect(screen.getByText('日志查看')).toBeInTheDocument();
- // 点击用户管理卡片
- const userManagementCard = screen.getByText('用户管理').closest('.cursor-pointer');
- await user.click(userManagementCard!);
- expect(mockNavigate).toHaveBeenCalledWith('/admin/users');
- // 点击系统设置卡片
- const settingsCard = screen.getByText('系统设置').closest('.cursor-pointer');
- await user.click(settingsCard!);
- expect(mockNavigate).toHaveBeenCalledWith('/admin/settings');
- // 点击数据备份卡片
- const backupCard = screen.getByText('数据备份').closest('.cursor-pointer');
- await user.click(backupCard!);
- expect(mockNavigate).toHaveBeenCalledWith('/admin/backup');
- // 点击日志查看卡片
- const logsCard = screen.getByText('日志查看').closest('.cursor-pointer');
- await user.click(logsCard!);
- expect(mockNavigate).toHaveBeenCalledWith('/admin/logs');
- });
- it('应该正确渲染所有导航元素', async () => {
- render(<DashboardPage />);
- // 验证所有快捷操作卡片都包含正确的描述
- expect(screen.getByText('查看和管理所有用户')).toBeInTheDocument();
- expect(screen.getByText('配置系统参数')).toBeInTheDocument();
- expect(screen.getByText('执行数据备份操作')).toBeInTheDocument();
- expect(screen.getByText('查看系统日志')).toBeInTheDocument();
- // 验证快捷操作区域存在
- const quickActionSection = screen.getByText('快捷操作');
- expect(quickActionSection).toBeInTheDocument();
- // 验证快捷操作卡片标题存在
- expect(screen.getByText('用户管理')).toBeInTheDocument();
- expect(screen.getByText('系统设置')).toBeInTheDocument();
- expect(screen.getByText('数据备份')).toBeInTheDocument();
- expect(screen.getByText('日志查看')).toBeInTheDocument();
- });
- });
|