Files
hms/apps/web/src/pages/health/PointsRuleList.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

50 lines
1.6 KiB
TypeScript

import { describe, it, expect, vi } from 'vitest';
import { screen, waitFor } from '@testing-library/react';
import { renderWithProviders } from '../../test/utils/renderWithProviders';
// Mock useThemeMode
vi.mock('../../hooks/useThemeMode', () => ({
useThemeMode: () => false,
}));
import PointsRuleList from './PointsRuleList';
describe('PointsRuleList', () => {
it('renders page title and table', async () => {
vi.setConfig({ testTimeout: 15000 });
renderWithProviders(<PointsRuleList />);
await waitFor(() => {
expect(screen.getByText('积分规则')).toBeInTheDocument();
});
});
it('shows create button', async () => {
renderWithProviders(<PointsRuleList />);
await waitFor(() => {
expect(screen.getByRole('button', { name: /新建规则/ })).toBeInTheDocument();
});
});
it('renders table with column headers', async () => {
renderWithProviders(<PointsRuleList />);
await waitFor(() => {
const table = document.querySelector('.ant-table');
expect(table).toBeInTheDocument();
});
const headers = document.querySelectorAll('th');
const headerTexts = Array.from(headers).map((h) => h.textContent?.trim());
expect(headerTexts.some((t) => t?.includes('规则名称'))).toBe(true);
expect(headerTexts.some((t) => t?.includes('事件类型'))).toBe(true);
expect(headerTexts.some((t) => t?.includes('积分值'))).toBe(true);
});
it('shows filter controls', async () => {
renderWithProviders(<PointsRuleList />);
await waitFor(() => {
const selects = document.querySelectorAll('.ant-select');
expect(selects.length).toBeGreaterThanOrEqual(2);
});
});
});