| name | test-driven-dev |
| description | [project] OPC-Starter 测试驱动开发规范。管理和执行 Playwright E2E 测试、演示模式测试、单元测试的完整工作流。适用于新增功能时补充测试用例、运行认证/注册/演示测试、维护测试规划文档。当用户提到测试、E2E、Playwright、演示、用例、质量、补充测试时使用。 |
OPC-Starter 测试驱动开发规范
快速命令
cd app && npm run test
cd app && npm run test:e2e
cd app && npm run test:e2e:auth
cd app && npm run test:e2e:demo
cd app && npm run test:e2e:ui
cd app && npm run test:e2e:report
核心原则
- 新功能 → 先写测试 或功能完成后立即补充
- 演示测试独立维护 →
tests/e2e/demo/ 目录,带打字机效果
- 可重复执行 → 注册测试用
Date.now() 生成唯一邮箱,beforeEach 清理状态
- 测试状态更新 → 完成用例后更新
tests/TEST_PLAN.md
目录结构
app/tests/
├── e2e/
│ ├── auth/
│ │ ├── login.spec.ts # 登录测试 (14 个)
│ │ └── register.spec.ts # 注册测试 (17 个)
│ ├── demo/
│ │ └── demo-auth.spec.ts # 演示测试 (5 个)
│ ├── dashboard.spec.ts # fixme
│ ├── profile.spec.ts # fixme
│ ├── persons.spec.ts # fixme
│ └── settings.spec.ts # fixme
└── support/
├── fixtures/auth.fixture.ts
└── helpers/
├── test-helpers.ts
└── demo-helpers.ts # 打字机/高亮效果
新增功能测试 Checklist
新增页面
test('[P1] 应该能够访问页面', ...)
test('[P1] 应该显示主要内容', ...)
test('[P1] 核心交互测试', ...)
test('[P2] 导航到其他页面', ...)
新增表单
test('[P0] 成功提交', ...)
test('[P1] 空字段被阻止', ...)
test('[P1] 无效格式被阻止', ...)
test('[P1] 显示错误提示', ...)
新增演示用例模板
import { test, expect } from '@playwright/test';
import { fillFormWithEffect, clickWithEffect, highlightElement } from '../../support/helpers/demo-helpers';
test.use({ launchOptions: { slowMo: 50 }, video: 'on' });
test.describe('🎬 演示模式 - [功能名]', () => {
test.beforeEach(async ({ page }) => {
await page.context().clearCookies();
await page.evaluate(() => { try { localStorage.clear(); } catch {} });
});
test('🎬 演示:[场景名]', async ({ page }) => {
await page.goto('/path');
await page.waitForLoadState('networkidle');
await fillFormWithEffect(page, [
{ selector: '#field1', value: '值1' },
{ selector: '#field2', value: '值2' },
]);
await highlightElement(page, 'button[type="submit"]', 500);
await clickWithEffect(page, 'button[type="submit"]', { pause: 1000 });
});
});
演示辅助函数速查
| 函数 | 用途 | 关键参数 |
|---|
typeWithEffect(page, selector, text) | 打字机效果输入 | delay: 40 |
highlightElement(page, selector, duration) | 红色边框高亮 | duration: 500 |
clickWithEffect(page, selector) | 高亮后点击 | pause: 300 |
fillFormWithEffect(page, fields[]) | 表单批量填充 | fields 数组 |
演示速度配置在 tests/support/helpers/demo-helpers.ts → DEMO_CONFIG
测试用例文件结构
import { test, expect } from '@playwright/test';
const TEST_USER = { email: 'test@example.com', password: '888888' };
async function clearAuthState(page) { ... }
test.describe('[P0] 核心流程', () => { ... });
test.describe('[P1] 验证逻辑', () => { ... });
test.describe('[P2] 用户体验', () => { ... });
test.describe('[P3] 边界情况', () => { ... });
运行器配置
Playwright 配置:app/playwright.config.ts
演示速度参数:tests/support/helpers/demo-helpers.ts
测试规划文档:tests/TEST_PLAN.md
详细说明见 references/testing-patterns.md