-
Notifications
You must be signed in to change notification settings - Fork 0
Testing
Seeker32 edited this page Aug 16, 2026
·
4 revisions
原则:无测试即不存在。TDD 强制(红 → 绿 → 重构),未通过的测试不可跳过。
| 层 | 工具 | 范围 | 位置 |
|---|---|---|---|
| 单元测试 | vitest / cargo test | 纯逻辑:Zustand 状态流转、i18n 工具、Rust 服务函数、模型合法性 |
src/test/*.test.ts(x)、Rust #[cfg(test)]
|
| 属性测试 | proptest | 模型合法性(时间戳、百分比、端口范围)、HostConfig 无明文不变量 |
models/monitor.rs、models/mod.rs、core/host_service.rs
|
| 集成测试 | React Testing Library | invoke/event 契约验证、store ↔ 组件交互 | homepage.integration.test.tsx |
| E2E | Playwright | SSH 生命周期、终端交互、文件传输、监控更新、分组/搜索/折叠 | e2e/app.spec.ts |
pnpm test # 前端单测+集成(vitest --run)
pnpm test:watch # 监听模式
pnpm test:e2e # Playwright E2E(mock 后端事件驱动)
cd src-tauri && cargo test # Rust 全量测试(含 proptest)- stores.test.ts:session(状态事件应用、closeSession 清理)、monitor / sftp(任务状态流转、invoke 返回前事件缓存补投、latest-wins、clearSession 清理缓存)
- i18n.test.ts:translate 命名参数替换、formatAppError(未知 code 回退、detail 拼接)、toAppError 规范化
- log-level.test.ts:readLogLevel 读取回退(损坏存储回退 info)、setLogLevel 调用 invoke
- logs.test.ts:日志 store(load 成功/失败/非数组防御、export 调用与错误)
- log-viewer.test.tsx:设置日志查看器(渲染/空态/错误态、刷新、2 秒轮询与卸载停止、导出对话框取消不 invoke)
- terminal-theme.test.ts:readTerminalTheme 读取回退、主题设置持久化
- release-notes.test.ts / release-workflow.test.ts:release-notes.mjs 发布说明提取与工作流契约
- components.test.tsx:组件渲染与交互(无业务逻辑断言)
- xterm-view.test.tsx:xterm 实例生命周期、resize 联动、主题应用
- homepage.integration.test.tsx:open_session 全流程 —— store 状态 + 事件 + 视图联动
- smoke.test.ts / application-name.test.ts:应用基础信息冒烟
-
mocks/:
tauri.ts(invoke 桩)、event.ts(listen 桩)、dialog.ts;jsdom 环境 - E2E 通过
window.__TAURI_TEST__.emit(...)从浏览器注入后端事件(session:status、monitor:snapshot、sftp:task_status),覆盖成功闭环、失败重试、分组增删改折叠、监视条折叠等路径
| 模块 | 覆盖 |
|---|---|
| host_service | save/delete 真实 composition 成功路径、auth type 切换清理、失败与补偿、无明文 proptest |
| ssh_transport | eager 连接等待 / 失败交付 / 按需重试、关闭后丢弃迟到结果、跨 Session 并发、opaque capability、Exec seam |
| terminal_service | 连接阶段映射、超时、错误 → SessionStatus 映射、命令队列 |
| session_manager | 会话注册/关闭/清理,SFTP 连接解绑与迟到注册拒绝 |
| monitor_service | 任务生命周期、重复启动防护、transition 迁移合法性(Failed 终态拒绝 Done、未知任务抑制事件) |
| monitor_worker | 采集脚本解析(/proc 增量 CPU、/proc/net/dev 网络速率、缺失字段为未知、脚本 guest 不变量)、错误回调、shutdown 退出 |
| sftp_service | 任务入队/进度/取消/失败、transition 更新 registry 并移除终态令牌、cleanup 语义、worker 全链路(memory_sftp 内存 adapter) |
| models | proptest 属性测试(毫秒时间戳、百分比、端口范围) |
| storage(host_store / secure_store) | CRUD 与凭据引用键管理 |
| errors(app_error) | 稳定英文错误码、IPC payload 序列化、不泄漏第三方错误类型 |
| commands(logging) | 日志等级解析(合法值接受、非法值拒绝)、core/logging 日志落盘/读取/导出/截断 |
- 每条新功能必须含:成功路径 + 失败路径 + 重试/边界
- Rust 测试重点:session 生命周期、服务隔离、async、
Result传播 - 前端测试重点:Zustand 状态迁移与事件处理;组件内不测业务逻辑
- 集成/E2E 聚焦 invoke/event 契约验证与完整闭环