新闻详情

新闻详情

首页 / 资讯中心 / 详情

Cabinet 测试体系实战:Playwright E2E 与 Fake Agent CLI 搭建指南

发布时间:2026/10/2 7:02:32来源:尧图网络
Cabinet 测试体系实战:Playwright E2E 与 Fake Agent CLI 搭建指南
Cabinet 测试体系实战Playwright E2E 与 Fake Agent CLI 搭建指南【免费下载链接】cabinetAI-first knowledge base and startup OS项目地址: https://gitcode.com/gh_mirrors/cabinet3/cabinetCabinet 是一款 AI-first 的自托管知识库与创业操作系统startup OS而支撑它稳定运行的是一套以Playwright E2E 端到端测试为核心的测试体系。这套体系最巧妙的设计是用脚本化的 Fake Agent CLI替代真实 AI 模型——测试无需 API Key、无需联网却能确定性地跑穿整个产品链路。本文用一篇完整指南带你从零看懂并亲手跑通这套 AI 智能体应用测试方案 Cabinet 本身要对接 Slack、Discord、Telegram 等大量外部工具和 AI 命令行claude、codex、gemini 等。正因为外部依赖这么多它的测试体系把隔离不确定性做到了极致测试体系全景3 层防线如何守护 AI 知识库Cabinet 的测试分为三层各司其职层级工具位置职责单元测试Node 内置 test runnertsx --testtest/ 目录350 个用例纯函数、解析器、配置逻辑E2E 端到端测试Playwrighte2e/ 目录5 个 spec 文件拉起真实应用跑穿核心产品链路夜间 Agent 审计真实 CLI 契约测试CI 定时任务设计见 CI 测试管线设计文档用真实模型验证输出格式兼容性单元测试由 scripts/run-unit-tests.mjs 统一调度E2E 层则由本文的主角——harness Fake Agent CLI——撑起。核心思想只有一句话状态必须被注入而不是被环境碰巧带上。Playwright E2E 配置详解为什么故意不用 webServer打开 playwright.config.ts仅 23 行你会发现一个反直觉的决定没有配置webServer。testDir: ./e2e fullyParallel: true timeout: 120_000 // 拉起真实应用比组件测试慢 trace: retain-on-failure screenshot: only-on-failure原因写在文件头部的注释里如果由 Playwright 统一拉起一个共享服务所有测试就会共享同一份可变状态——而这正是本测试套件要彻底消除的环境状态污染问题。取而代之每个 spec 文件自己启动一套隔离的应用实例详见下一节测试之间互不干扰fullyParallel可以放心全开。两个 CI 友好细节也值得抄进你自己的项目 ⚡forbidOnly: !!process.env.CI防止调试时忘了删.only就被合入retries: process.env.CI ? 1 : 0CI 上重试一次抵消偶发抖动一键拉起真实应用harness 的 4 个隔离技巧bootCabinet() 是整个 E2E 体系的引擎它在临时目录里拉起一个完全真实的Next.js 应用 守护进程。四个隔离技巧值得逐一学习临时数据目录注入CABINET_DATA_DIR环境变量指向临时目录并拷入种子 fixture根清单 一个可运行的editor智能体 工作区配置位于 test/support/fixtures/e2e-cabinet/。注意数据目录是模块级常量、导入时冻结所以必须在进程启动时注入事后无法更改。临时端口CABINET_DAEMON_PORT指向随机空闲端口天然支持并行。假 HOME 遮蔽真实 CLI这是最容易被忽略的一步。Cabinet 解析 CLI 的路径规则会把~/.local/bin排在$PATH之前——仅仅修改PATH根本盖不住开发者本机装好的真实 Claude。harness 因此为子进程造了一个临时 HOME把假 CLI 装进它的.local/bin确保测试绝不悄悄调用真实模型烧钱。轮询就绪而非 sleep启动后对/health端点轮询替代睡几秒赌它起来了的经典抖动源。启动失败时waitForOk() 会把应用和守护进程最后 25 行日志附在错误里——排障体验直接拉满。Fake Agent CLI 搭建指南让 AI 输出变得可预测如果 harness 解决环境隔离createFakeAgentCli() 就解决行为确定性。它生成一个真实可执行的 Node 脚本冒充claude命令被产品的真实适配代码原样 spawn——真实的 argv 构造、真实的流式解析、真实的退出码处理全部走一遍唯独没有网络调用和模型意见。它有两个核心能力正是测试接缝而非简单桩的关键脚本化Scripted每次调用按顺序消费一步程序。Cabinet 一次对话会多次 spawn CLI重试、追问、会话恢复一次性回放假数据的桩无法区分第 1 轮和第 3 轮而脚本化的假 CLI 可以——甚至能故意挂起hang来测试用户的停止按钮。记录Recording每次调用把 argv、stdin、cwd 追加写入 JSONL 日志。这是断言契约另一半的唯一途径——Cabinet请求了什么--resume是否带了上一轮捕获的会话 ID提示词是否走 stdin 而非 argv工作目录是否落在知识库内部两个辅助函数让编写测试用例几乎零成本辅助函数作用claudeReply()一步成功的流式回复自动附带协议要求的 cabinet 收尾块claudeFailure()一步失败通过 stderr 文本触发真实错误分类登录过期、限流等选 Node 而非 shell 脚本也藏着一个工程细节Cabinet 的停止逻辑向进程组发 SIGTERMshell 里sleep的子进程收不到信号会活过测试而 Node 进程默认会被终止——这类决策只有踩过坑才会懂。5 个 E2E 用例从对话到产物跑穿核心链路e2e/ 目录下 5 个 spec 文件恰好覆盖智能体产品最要命的五条链路用例文件验证内容agent-conversation.spec.ts 曳光弹发消息 → 假 CLI 流式回复 → 页面渲染同时断言 CLI 调用参数符合打印模式契约agent-failure.spec.ts登录过期、限流等失败被分类并给出修复提示而不是裸报错用户点停止的行为agent-turns.spec.ts多轮对话第 2 轮必须携带--resume 会话ID否则上下文悄悄丢失agent-triggers.spec.ts定时任务触发 技能文件挂载两者都不出现在界面上只有调用记录能暴露回归agent-outputs.spec.ts产物文件真实落盘、待审批动作必须人工批准才派发——智能体系统的爆炸半径边界断言工具也很克制cabinet-api.ts 提供基于fetch的类型化封装startConversation、waitForStatus 等测试既能无头驱动 API也能在需要时才打开浏览器断言 DOM。新手上手3 步跑通你的第一条 E2E 测试git clone https://gitcode.com/gh_mirrors/cabinet3/cabinet cd cabinet npm install npm run test:e2e就这么简单。每个 spec 会通过 harness 自建隔离环境你不需要预先配置任何密钥或环境变量。想同时跑单元测试执行npm run test即可。建议打开 CI 测试管线设计文档 对照阅读理解曳光弹tracer bullet这条核心链路的取舍逻辑。进阶让 E2E 测试成为 CI 的合并闸门这套设计天然适合卡合并因为没有 API Key、没有网络e2e 任务可以安全地跑在 fork PR 上且失败即阻断。设计文档给出的 CI 拓扑是每 PR阻断式构建 → 单测转真闸门 → e2e复用构建产物失败时上传 trace 和截图每夜只报告不阻断装真实 claude/codex/gemini CLI 跑契约测试兜住模型厂商悄悄改了输出格式这类单测看不到的风险写在最后Cabinet 测试体系给 AI 应用开发者留下了三个可复用的模式 注入而非依赖环境数据目录、端口、HOME 全部在进程启动时注入状态干净假二进制替代假 Mock让产品真实代码路径原样执行只替换最末端的外部进程既断言输出、也断言请求记录每次调用契约的两半都要验证核心资料索引playwright.config.ts · test/support/harness.ts · test/support/fake-agent-cli.ts · test/support/cabinet-api.ts · e2e/【免费下载链接】cabinetAI-first knowledge base and startup OS项目地址: https://gitcode.com/gh_mirrors/cabinet3/cabinet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

SSM校园网站项目从导入到改造:IDEA配置、数据库初始化与排错指南 2026/10/2 7:51:52

SSM校园网站项目从导入到改造:IDEA配置、数据库初始化与排错指南

很多人拿到一套“java_ssm61学院信息工程系校园网站”项目源码时,第一反应是双击解压,然后把整个文件夹直接拖进IDEA。结果要么满屏红叉,要么启动Tomcat后浏览器给你一张404,更有甚者项目起来了,登录页面却报数据库连不…

阅读更多 →
Skills Manager:统一管理54款AI编程工具的Agent技能 2026/10/2 7:51:45

Skills Manager:统一管理54款AI编程工具的Agent技能

1. 为什么我们需要一个“技能中枢”过去一年里,我陆续在五六个AI编程工具之间来回切换。Claude Code、Cursor、Windsurf、Cline、Roo Code、Aider……每换一个工具,我就要重新配置一遍Agent技能:把同一份代码审查规则复制到不同的配置目录&am…

阅读更多 →
WPS批量修改表格样式:从手动到VBA一键格式化 2026/10/2 7:51:39

WPS批量修改表格样式:从手动到VBA一键格式化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
激光雷达三种测距方式对比:ToF、三角测距与FMCW选型指南 2026/10/2 7:51:39

激光雷达三种测距方式对比:ToF、三角测距与FMCW选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Koopman算子实现非线性系统线性化MPC控制 2026/10/2 7:51:39

Koopman算子实现非线性系统线性化MPC控制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Orcad Allegro补丁本质是Windows系统兼容性工程 2026/10/2 7:51:38

Orcad Allegro补丁本质是Windows系统兼容性工程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉