5 分钟跑通 Agentic 测试:从最小用例到快照防回归
【免费下载链接】agenticYour API ⇒ Paid MCP. Instantly.项目地址: https://gitcode.com/GitHub_Trending/ag/agentic
Agentic 测试不需要测试理论基础:读完全文,你能独立在这个仓库跑通测试、写出第一个用例,并用快照拦住意外回归。
🏁 先跑起来:Agentic 测试环境的最小命令链
先确认 Node 版本不低于 20(package.json的engines写死了>=20),然后敲这几条命令:
git clone https://gitcode.com/GitHub_Trending/ag/agentic cd agentic pnpm install pnpm test项目用 pnpm 管理依赖(preinstall钩子用only-allow锁死了包管理器,npm/yarn 会被直接拦住),测试框架是Vitest。根目录pnpm test实际执行turbo test,以 32 路并发调度packages/、stdlib/等所有子包。第一次跑会先触发pretest构建钩子,等终端出现各子包的全绿报告,环境就算跑通了。
📝 用例怎么写:单元测试的骨架与命名习惯
约定就三条:文件一律.test.ts后缀;跟源码同目录,utils.ts旁边就是utils.test.ts(见 stdlib/core/src/utils.test.ts,个别包如json-schema放test/子目录);断言统一走 Vitest 的expect。骨架是describe圈套件、test写用例:
import { describe, expect, test } from 'vitest' import { zodToJsonSchema } from './zod-to-json-schema' describe('zodToJsonSchema', () => { test('handles basic objects', () => { expect(zodToJsonSchema(schema)).toEqual(expected) }) })一个用例只验一件事,用例名里出现 "and" 就该拆开。函数简单时可以直接test不套describe,仓库里两种风格并存。常有人问 TypeScript 项目如何写单元测试,答案就藏在这套约定里:就近放置、命名即文档、断言单一,可对照 stdlib/core/src/zod-to-json-schema.test.ts 的完整写法。
📸 状态变了怎么办:快照测试防回归的正确姿势
快照测试什么时候用?一句话:输出结构稳定、但手工写断言太累。适用场景是 API 响应格式、复杂对象序列化这类"格式不该变"的东西;时间戳、随机 ID、环境相关路径就别拍了——每次运行都变,快照必然变红。
真实用例(utils.test.ts里的sanitizeSearchParams):
expect(sanitizeSearchParams({ a: [1, 2, 3] }).toString()).toMatchSnapshot() expect(sanitizeSearchParams({}).toString()).toMatchSnapshot()首次运行会把输出写进__snapshots__目录,如 stdlib/core/src/snapshots/utils.test.ts.snap,内容是一行行exports[`sanitizeSearchParams 1`] = `"a=1&c=13"`。之后每次运行逐字比对,代码改动导致输出不一致,测试直接红。看到红灯先确认变更是否符合预期:该变就按 Vitest 的-u参数更新快照,不该变就去查代码,别无脑放行。
🛡️ 让 Agentic 测试不翻车:3 条实操建议
覆盖率和稳定性是两回事,下面三条最容易见效:
- 核心公共 API 全覆盖:
packages/types、stdlib/core这类对外导出的函数一个不能漏——它们是被下游依赖的契约,改动最伤。 - 边界与异常输入必测:空对象、空数组、
undefined、null各喂一轮,pruneEmpty({ b: {}, c: [] })这种用例就是现成范本。 - 新功能先写用例再写实现:TDD节奏让 API 形状先于代码定型,红-绿-重构循环会逼你把边界想清楚再动手。
⚠️ 常见误区速查:新手最容易踩的坑
翻车基本集中在这三处,每条都值得对号入座:
- 把快照当万能断言:快照只拦"意外变更",不证明逻辑正确,关键分支仍要写显式
expect。 - 测试里硬编码外部服务:直连真实 API 的用例会随对方服务漂移,本地 mock(仓库已有
mockKyInstance这类工具)或走 e2e 夹具。 - 快照红了无脑更新:不看 diff 就更新,等于把回归放行;反过来该更新却不敢更新,CI 长期红灯问题也解决不了。
现在就打开终端跑一遍pnpm test,然后挑一个你改过的函数,补上它的第一份.test.ts。
【免费下载链接】agenticYour API ⇒ Paid MCP. Instantly.项目地址: https://gitcode.com/GitHub_Trending/ag/agentic
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考