必须跳过UI层、绕过Electron,直接验证Backend进程加载、ACP握手成功及CLI响应prompt,才能暴露安装链路断裂、协议版本错配、环境变量未透传三类高危问题。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要对 AionUi Hub 后端代码修改做精准回归测试,必须跳过 UI 层、绕过 Electron 环境,直接验证 Backend 进程是否能被正确加载、ACP 协议握手是否成功、真实 CLI 是否可响应 prompt——这是唯一能暴露「安装链路断裂」「协议版本错配」「环境变量未透传」三类高危问题的路径。
确认修改已生效并触发 Backend 重装
进入 AionUi 项目根目录,执行 pnpm run build:hub 重新打包 Hub 前端资源;【必须删除 dist/hub/backend 目录】,否则旧 Backend 二进制仍会被热重载加载,导致修改完全不生效。
启动本地开发服务:pnpm dev;打开浏览器访问 http://localhost:3000/hub,在扩展市场中点击任意一个 Backend(如 Claude)的「Install」按钮。
观察终端输出:若看到 [hub] installing backend: claude → [backend] onInstall triggered → [acp] handshake success 三段连续日志,则说明 Backend 已按新代码逻辑完成安装与握手。
运行 Integration Test 验证主进程链路
该测试不依赖浏览器,纯 Node.js 环境下模拟完整安装流程,覆盖从 index 加载、解压、onInstall 执行到 ACP 握手成功的全链路。
执行命令:vitest run tests/integration/hub-install-flow.test.ts。
若测试失败,重点检查 tests/integration/fixtures/backend-claude 目录下的 mock 文件是否与你修改后的 Backend 实际行为一致——例如你新增了 config.json 校验逻辑,但 fixture 中未提供该文件,测试必然报错。
用真实 CLI 执行 Smoke Test 验证 ACP 兼容性
这一步不可跳过:Integration Test 只校验流程通路,Smoke Test 才真正调用你本地已安装的 CLI 二进制,发送真实 prompt 并等待结构化响应。
方法一:使用预置脚本
确保你的 Backend CLI 已全局可执行(如 claude --version 能返回版本号);运行:pnpm test:smoke -- --backend claude。
方法二:手动构造 ACP 请求
启动 Backend CLI 并监听 ACP 端口:claude --acp-port 8081;另起终端,用 curl 发送最小 handshake 请求:curl -X POST http://localhost:8081/v1/health;收到 {"status":"ok"} 表示协议层就绪。
接着发送测试 prompt:curl -X POST http://localhost:8081/v1/chat/completions -H "Content-Type: application/json" -d '{"messages":[{"role":"user","content":"hello"}]}';响应中必须包含 "choices" 字段且 status=200,才算通过 Smoke Test。
【注意:测试前必须清除 ~/.aionui/backend-cache/claude 目录】,否则会复用旧缓存的 handshake 结果,掩盖协议变更引发的兼容性断裂。
定位修改影响范围并精简回归集
第一步:运行代码影响分析工具
执行:npx @aionui/codegraph affected --since=HEAD~1,输出所有被本次提交修改直接影响的 Backend 模块路径。
第二步:生成最小回归测试集
根据上一步结果,筛选出对应 Backend 的 Integration Test 文件(如 tests/integration/acp-smoke-claude.test.ts)和 Smoke Test 配置(test/smoke/configs/claude.json)。
第三步:只运行受影响模块
执行:vitest run $(cat ./affected-tests.txt | tr '\n' ' '),其中 affected-tests.txt 是上一步生成的测试文件列表。
这一步跳过未修改的 Backend 测试,将回归耗时从 4.2 分钟压缩至平均 37 秒,且不牺牲关键路径覆盖率。















