功能测试流程与自动化脚本
8.9 Hooks自动化测试
Tip
人会忘,但脚本不会。把规范交给机器,别考验人性。
1. 为什么要学这个?
你是团队里最仔细的程序员。但上周五临下班前,你急着去约会,随手提交了一行代码。 周一回来,发现你把 AWS 的密钥直接写在代码里提交上去了。 黑客在一小时内扫描到了你的密钥,开了 100 台挖矿机。公司破产了。
如果我们能设定一个规则:每次提交代码前,自动扫描一遍敏感信息。如果不通过,打死也不让提交。这就是 Git Hooks 的价值。
2. 核心概念:Git Hooks 与 Husky
Git 原生就有很多“钩子” (Hooks),比如 pre-commit (提交前)。
但配置原生的钩子很繁琐。前端界通常用 Husky 这条“哈士奇”来看门。
它的工作流
- 你输入
git commit -m "fix bug"。 - Husky 拦截:等等,先别提交。我要检查你的背包。
- 执行命令:运行
npm run verify(含 Lint 检查、密钥扫描)。 - 结果:
- ❌ 失败:发现密钥!报错中止,提交失败。
- ✅ 成功:放行,生成 Commit。
3. 解决方案 (HOW)
1. 安装哈士奇
pnpm add husky -D
npx husky init
2. 设置关卡
在 .husky/pre-commit 文件里,写下你想检查的命令:
# 1. 检查代码风格 (Lint)
npm run lint
# 2. 跑单元测试 (只跑逻辑测试,别跑太慢的 E2E)
npm run test:unit
3. 只检查改动的文件 (Lint-staged)
别每次都检查全项目 1000 个文件,太慢了。 我们需要 Lint-staged:只检查你这次修改过 (Staged) 的文件。
// package.json
{
"lint-staged": {
"*.{ts,tsx}": [
"eslint --fix", // 自动帮你修格式
"vitest related --run" // 只跑相关的测试
]
}
}
4. 真实案例
Story
价值 6 万美元的“一次泄露”
2014 年,一位开发者不小心把 AWS Access Key 上传到了 GitHub 公开仓库。 仅仅 5 分钟后,就有名为“AWS 爬虫”的机器人扫描到了这个 Key。 机器人自动开通了巨量的 EC2 实例挖比特币。第二天早上,账单:$60,000。
Vibe 解法:
如果他配置了简单的 pre-commit 钩子,配合 gitleaks 扫描脚本。
在他按下回车的那一瞬间,终端就会报警:❌ 发现潜在密钥,提交已终止!
这一行简单的配置,价值 6 万美元。
5. 本章小结
- 守门员:Husky 是你本地仓库的最后一道防线。
- 速度第一:
pre-commit必须快(30秒内),太慢的检查放到 CI 流水线去跑。 - 防呆设计:不要相信记忆力,要相信自动化。