AgentEvalTool/frontend/web/src/components/SectionHeader.test.tsx
sinohqb 3705945a7d test: 完整测试覆盖补全(+163 用例)
架构重构(候选 1-6):
- storage/repository.py 按域拆分为包(target/scenario/run/campaign/result)
- storage/db.py 按域拆分为包(eval/campaign/file/model_config/intelligent_eval)
- intelligent_eval/lifecycle.py 按状态机阶段拆分为包
- services/runs.py 编排逻辑下沉
- Campaigns.tsx 拆分为 campaigns/ 子组件

测试补全(候选 7):
前端(+125 用例,107→232):
- utils/ 纯函数:date/campaignTime/ruleLabels/fileTree/fileFormat/colors
- stores/tabStore 状态管理
- 核心组件:FormDrawer/PageWrapper/ChatBubble/GeneratedMessages/SectionHeader/StatCard/TurnList
- 业务组件:CaseBlock/CaseDetail/RuleOverview/WindowTimeline/RunList/TabBar/CampaignRunTimeline
- 文件管理:FileCategoryTree/FileTable
- hooks:sessionReducer/useFiles/useRunSession

后端(+38 用例,916→954):
- targets API CRUD + 404 路径
- WebSocket 连接管理器
- proxy 头部重写(CSP/X-Frame-Options)
- target 仓储 update 方法
- app 健康检查 + SPA 404
- scenarios 模板端点 + 404
- files API 边缘分支(404 场景 + 500 兜底)
- files service update_category
- 智能评估状态机迁移测试

门禁状态:
- 前端:tsc 干净 + 232 passed
- 后端:954 passed + ruff 全绿
2026-08-24 15:56:09 +08:00

36 lines
1.2 KiB
TypeScript

import { render, screen, fireEvent } from '@testing-library/react'
import { describe, expect, it, vi } from 'vitest'
import SectionHeader from './SectionHeader'
describe('SectionHeader', () => {
it('renders title', () => {
render(<SectionHeader title="标题" />)
expect(screen.getByText('标题')).toBeTruthy()
})
it('renders back button when onBack provided', () => {
const onBack = vi.fn()
render(<SectionHeader title="标题" onBack={onBack} />)
const btn = screen.getByText('返回')
expect(btn).toBeTruthy()
fireEvent.click(btn)
expect(onBack).toHaveBeenCalled()
})
it('uses custom backLabel', () => {
render(<SectionHeader title="标题" onBack={vi.fn()} backLabel="上一步" />)
expect(screen.getByText('上一步')).toBeTruthy()
})
it('does not render back button when onBack not provided', () => {
const { container } = render(<SectionHeader title="标题" />)
const buttons = container.querySelectorAll('button')
expect(buttons).toHaveLength(0)
})
it('renders actions', () => {
render(<SectionHeader title="标题" actions={<button></button>} />)
expect(screen.getByText('刷新')).toBeTruthy()
})
})