refactor(skills): 澄清 dev-test 与 req-test-gate 的职责边界

- dev-test: 移除 "Gate 4" 编号,改用 "E2E 冒烟门禁"(避免与 req-test-gate 的 Gate 编号冲突)
- dev-test: 添加与 req-test-gate 的关系说明(本文档定义执行技术,门禁流程在 req-test-gate)
- req-test-gate: 2C 联调节新增无后端替代方案提示,引用 dev-test 的 API Mock 模式
- req-test-gate: Gate 5 前端回归贡献引用 dev-test 的 e2e-testing.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-16 11:40:47 +10:30
parent 63ab37c256
commit 2309e31e74
3 changed files with 17 additions and 9 deletions

View File

@@ -139,5 +139,5 @@ ai-proj task append-doc --id <taskId> --content "# 测试报告
5. **持续集成** - 每次提交运行 5. **持续集成** - 每次提交运行
6. **Biz 层禁止 Mock** - biz/service 层必须使用真实 PostgreSQL test DB + 真实 storemock 等于没测 6. **Biz 层禁止 Mock** - biz/service 层必须使用真实 PostgreSQL test DB + 真实 storemock 等于没测
7. **Mock 仅限 Handler 层** - handler 层可以 mock biz 接口 + httptest 7. **Mock 仅限 Handler 层** - handler 层可以 mock biz 接口 + httptest
8. **Gate 4 必须用 API Mock E2E** - E2E 门禁不能依赖后端,否则形同虚设。用 `page.route()` 拦截 API`e2e-testing.md` 8. **E2E 冒烟测试必须用 API Mock** - E2E 门禁不能依赖后端,否则形同虚设。用 `page.route()` 拦截 API`e2e-testing.md`。质量门禁流程Gates 1-5定义在 `req-test-gate` 技能中
9. **李宁测试用例** - Excel 导出见 `coolbuy-legacy` 技能的 `test-cases-excel.md` 9. **李宁测试用例** - Excel 导出见 `coolbuy-legacy` 技能的 `test-cases-excel.md`

View File

@@ -4,10 +4,12 @@
| 模式 | 后端依赖 | 速度 | 适用场景 | 门禁阶段 | | 模式 | 后端依赖 | 速度 | 适用场景 | 门禁阶段 |
|------|---------|------|---------|---------| |------|---------|------|---------|---------|
| **API Mock 冒烟测试** | ❌ 无需后端 | 快(<30s | UI 布局、路由、菜单、权限隔离 | Gate 4 自动化门禁 | | **API Mock 冒烟测试** | ❌ 无需后端 | 快(<30s | UI 布局、路由、菜单、权限隔离 | E2E 冒烟门禁 |
| **全链路集成测试** | ✅ 需完整后端+DB | 慢(分钟级) | CRUD 业务流程、数据持久化 | 手动/CI | | **全链路集成测试** | ✅ 需完整后端+DB | 慢(分钟级) | CRUD 业务流程、数据持久化 | 手动/CI |
**⚠️ 关键原则:Gate 4 E2E 门禁必须使用 API Mock 模式,不依赖后端。** 依赖后端的 E2E 在开发机上经常跑不通后端没启动、DB 未初始化),导致门禁形同虚设。 **⚠️ 关键原则E2E 冒烟门禁必须使用 API Mock 模式,不依赖后端。** 依赖后端的 E2E 在开发机上经常跑不通后端没启动、DB 未初始化),导致门禁形同虚设。
> **与 req-test-gate 的关系**:本文档定义 E2E 测试的**执行技术**(怎么写 mock、怎么跑。质量门禁流程Gates 0-5、scope 分级、文档持久化)定义在 `req-test-gate` 技能中。
--- ---
@@ -212,13 +214,18 @@ test.describe('路由重定向', () => {
| **chromium 未安装** | `Executable doesn't exist` | `npx playwright install chromium` | | **chromium 未安装** | `Executable doesn't exist` | `npx playwright install chromium` |
| **前端 proxy** | API 请求未被 route 拦截 | `page.route()` 在浏览器层拦截,不受 webpack proxy 影响 | | **前端 proxy** | API 请求未被 route 拦截 | `page.route()` 在浏览器层拦截,不受 webpack proxy 影响 |
### 5. Gate 4 集成dev-test 5-Gate 流程) ### 5. 与 req-test-gate 门禁集成
本节的 API Mock 冒烟测试对应 `req-test-gate` 中以下阶段:
- **Gate 2 → 2A (T4b)**: 前端构建验证(`vite build` / `craco build`
- **Gate 2 → 2C (IT6)**: 页面可访问性验证API Mock 代替真实后端)
- **Gate 5**: 回归贡献中的 E2E 场景描述
```bash ```bash
# package.json 新增命令 # package.json 新增命令
"test:e2e:smoke-mock": "playwright test --config=playwright.smoke.config.ts" "test:e2e:smoke-mock": "playwright test --config=playwright.smoke.config.ts"
# Gate 4 执行流程: # 执行流程:
# 1. 确认 chromium 已安装 # 1. 确认 chromium 已安装
npx playwright install chromium npx playwright install chromium
@@ -228,10 +235,10 @@ npm run test:e2e:smoke-mock
# 3. 解析 e2e-smoke-results.json 判定通过/失败 # 3. 解析 e2e-smoke-results.json 判定通过/失败
``` ```
**Gate 4 判定标准** **判定标准**
- ✅ 全部通过 → Gate 4 Pass - ✅ 全部通过 → Pass
- ⚠️ 部分失败但非核心路径 → 记录失败项,人工判定 - ⚠️ 部分失败但非核心路径 → 记录失败项,人工判定
- ❌ 核心路径失败(登录、主导航、角色隔离)→ Gate 4 Fail阻断发布 - ❌ 核心路径失败(登录、主导航、角色隔离)→ Fail阻断发布
### 6. 适合 Mock E2E 验证的场景 ### 6. 适合 Mock E2E 验证的场景

View File

@@ -122,6 +122,7 @@ git diff main...HEAD --name-only | classify_scope
**不触发**scope 为 `backend``style-only`,或前端改动不涉及 API 调用 **不触发**scope 为 `backend``style-only`,或前端改动不涉及 API 调用
**环境要求**:本地开发环境,前端 :3000 + 后端 :8080 同时运行 **环境要求**:本地开发环境,前端 :3000 + 后端 :8080 同时运行
> **无后端替代方案**IT6 页面可访问性验证可用 Playwright API Mock 模式(`page.route()`)替代真实后端。详见 `dev-test` 技能的 `e2e-testing.md` §API Mock 冒烟测试。
**前置步骤** **前置步骤**
1. 确认本地数据库已执行相关 migration菜单、表结构等 1. 确认本地数据库已执行相关 migration菜单、表结构等
@@ -357,7 +358,7 @@ Task({
| scope | 贡献形式 | 示例 | | scope | 贡献形式 | 示例 |
|-------|---------|------| |-------|---------|------|
| `backend` | curl 脚本API 回归) | `curl -X POST .../api` → 201 | | `backend` | curl 脚本API 回归) | `curl -X POST .../api` → 201 |
| `frontend` | E2E 场景描述Playwright | 页面加载 + 核心交互验证 | | `frontend` | E2E 场景描述Playwright API Mock | 页面加载 + 核心交互验证。编写模式见 `dev-test` 技能 `e2e-testing.md` |
| `style-only` | 视觉回归 checklist | 断点覆盖 + !important 审计 | | `style-only` | 视觉回归 checklist | 断点覆盖 + !important 审计 |
| `fullstack` | curl 脚本 + E2E 场景 | 两者都需要 | | `fullstack` | curl 脚本 + E2E 场景 | 两者都需要 |