Next.js 对抗性 QA 及边界测试注入(nextjs-adversarial-qa)
专门的自动化工作流,旨在通过将代码审查和边界测试委托给一个独立的对抗性审计子代理,从而消除开发者的确认偏差。
[!TIP] 参考文档:
- 常见陷阱与反模式:
references/pitfalls.md
架构规则与标准
1. 无偏审计师原则
- 编写组件的主代理不得自行认证边界情况。
- 你必须使用
invoke_subagent生成一个独立的子代理来审计代码并注入对抗性断言。
2. 对抗性边界测试范围([ComponentName].edge.test.tsx)
子代理必须编写 [ComponentName].edge.test.tsx,目标针对开发者经常忽略的场景:
- 边界值: 空字符串、null/undefined 输入、超长字符串、Unicode 及波斯语 RTL 字形(
"سلام دنیا")。 - 属性排列组合: 可选标志的未处理组合。
- 网络与错误状态: 异步拒绝、格式错误的负载、慢速流。
- 深度无障碍与动效: 键盘导航(
Enter、Space、Tab、Escape)、aria-expanded、aria-busy、aria-live、焦点捕获以及prefers-reduced-motion。 - 压力与生命周期: 快速重渲染、卸载清理、定时器销毁。
3. 不可变的对抗性测试原则
- 严禁修改或弱化测试: 开发者不得删除或削弱
[ComponentName].edge.test.tsx中的断言。 - 修复代码,而非测试: 如果对抗性测试失败,则修改组件(
[ComponentName].tsx)或故事([ComponentName].stories.tsx)以正确处理该边界情况。
工作流步骤
-
步骤 1:生成对抗性审计子代理
- 调用
invoke_subagent,参数如下:TypeName:"self"Role:"对抗性代码与 QA 审计师"Model:"inherit"Prompt:指示审计师检查[ComponentName].tsx、[ComponentName]Skeleton.tsx、[ComponentName].test.tsx和[ComponentName].stories.tsx,然后在组件目录中生成[ComponentName].edge.test.tsx。
- 调用
-
步骤 2:审计师注入
[ComponentName].edge.test.tsx- 审计师编写边界断言并完成审查。
-
步骤 3:执行对抗性测试与自动修复
- 运行边界测试套件:
pnpm test -- <target_component_dir>/[ComponentName].edge.test.tsx - 如果任何测试失败,修补组件实现,直至所有边界测试以 0 错误通过。
- 运行边界测试套件: