Skip to content

Testing

Seeker32 edited this page Aug 11, 2026 · 4 revisions

测试策略

原则:无测试即不存在。TDD 强制(红 → 绿 → 重构),未通过的测试不可跳过。

测试金字塔

工具 范围 位置
单元测试 vitest / cargo test 纯逻辑:Zustand 状态流转、i18n 工具、Rust 服务函数、模型合法性 src/test/*.test.ts(x)、Rust #[cfg(test)]
属性测试 proptest 模型合法性(时间戳、百分比、端口范围)、HostConfig 无明文不变量 models/monitor.rsmodels/mod.rscore/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
  • 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),覆盖成功闭环、失败重试、分组增删改折叠、监视条折叠等路径

Rust 测试

模块 覆盖
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) 日志等级解析(合法值接受、非法值拒绝)

约定

  • 每条新功能必须含:成功路径 + 失败路径 + 重试/边界
  • Rust 测试重点:session 生命周期、服务隔离、async、Result 传播
  • 前端测试重点:Zustand 状态迁移与事件处理;组件内不测业务逻辑
  • 集成/E2E 聚焦 invoke/event 契约验证与完整闭环

Clone this wiki locally