Files
hms/apps/web/src/pages/health/AlertDashboard.test.tsx
iven c35ea83799
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled
test(web): 核心健康管理页面测试 — 12 个页面 51 个测试用例
新增测试覆盖:
- PatientDetail: 5 测试(渲染/标签页/数据展示)
- AlertDashboard: 5 测试(渲染/统计卡片/告警列表)
- AlertRuleList: 5 测试(渲染/规则表格/创建按钮)
- DeviceManage: 5 测试(渲染/设备列表/筛选)
- AiAnalysisList: 6 测试(渲染/分析记录/分页)
- AiUsageDashboard: 4 测试(渲染/统计/类型分布)
- ArticleManageList: 5 测试(渲染/文章表格/分类筛选)
- PointsProductList: 5 测试(渲染/商品表格/上下架)
- PointsRuleList: 4 测试(渲染/规则表格)
- PointsOrderList: 5 测试(渲染/订单表格/状态筛选)
- StatisticsDashboard: 2 测试(渲染/权限守卫)
- DoctorSchedule: 3 测试(渲染/排班日历/科室筛选)

测试基础设施:
- 8 个新 fixture 工厂(device/analysis/points/article/alert/schedule)
- 10 组新 MSW handlers
- 5 个新权限码(devices/dashboard/oauth/ai.usage)

前端测试:527/530 通过(3 个预存失败未受影响)
2026-05-04 18:02:55 +08:00

64 lines
1.9 KiB
TypeScript

import { describe, it, expect, vi } from 'vitest';
import { screen, waitFor } from '@testing-library/react';
import { renderWithProviders } from '../../test/utils/renderWithProviders';
// Mock SSE hook
vi.mock('../../hooks/useAlertSSE', () => ({
useAlertSSE: () => ({ connected: false, connectionState: 'disconnected', recentAlerts: [], reconnect: vi.fn() }),
}));
// Mock useThemeMode
vi.mock('../../hooks/useThemeMode', () => ({
useThemeMode: () => false,
}));
import AlertDashboard from './AlertDashboard';
describe('AlertDashboard', () => {
it('renders the dashboard title', async () => {
vi.setConfig({ testTimeout: 15000 });
renderWithProviders(<AlertDashboard />);
await waitFor(() => {
expect(screen.getByText('告警仪表盘')).toBeInTheDocument();
});
});
it('shows statistics cards', async () => {
renderWithProviders(<AlertDashboard />);
await waitFor(() => {
expect(screen.getByText('待处理')).toBeInTheDocument();
});
expect(screen.getByText('已确认')).toBeInTheDocument();
expect(screen.getByText('危急值')).toBeInTheDocument();
});
it('shows alert list card', async () => {
renderWithProviders(<AlertDashboard />);
await waitFor(() => {
expect(screen.getByText('告警列表')).toBeInTheDocument();
});
});
it('shows SSE connection status indicator', async () => {
renderWithProviders(<AlertDashboard />);
await waitFor(() => {
expect(screen.getByText('连接断开')).toBeInTheDocument();
});
});
it('shows status filter dropdown', async () => {
renderWithProviders(<AlertDashboard />);
await waitFor(() => {
expect(screen.getByText('告警仪表盘')).toBeInTheDocument();
});
// The status filter Select should be present
const selects = document.querySelectorAll('.ant-select');
expect(selects.length).toBeGreaterThan(0);
});
});