Files
a-share-analysis/docs/features/FEAT-QA-001-e2e-clock-isolation/prd.md
T

85 lines
2.9 KiB
Markdown

# 市场概览 E2E 测试时钟隔离 PRD
- 功能编号:FEAT-QA-001
- PRD 版本:0.1
- 状态:in_review
- 日期:2026-08-24
## 背景与问题
市场概览 HTTP E2E 使用 `20260818` 固定行情夹具,却读取真实系统日期判断 `fresh/delayed`。日期跨过 2026-08-18 后,生产代码正确返回 `delayed`,测试仍固定要求 `fresh`,导致完整门禁出现 2 个稳定失败。
## 目标用户与使用场景
开发者在任意自然日期执行完整验证,都应得到与固定夹具语义一致、可重复的测试结果。
## 产品目标
隔离 E2E 测试时钟,使测试日期与夹具交易日一致,并在用例结束后恢复真实时钟。
## 非目标
不修改生产新鲜度规则、不引入交易日历、不改变 HTTP/OpenAPI、不修改 TDX 数据映射。
## 用户流程
开发者执行 Server 测试,E2E 在隔离时钟下启动 Nest 应用、验证响应,随后关闭应用并恢复真实时钟。
## 功能需求
| 编号 | 优先级 | 需求 | 可观察结果 |
|---|---|---|---|
| QA-001 | P0 | 每个市场概览 HTTP E2E 用例固定到夹具交易日 | `fresh` 断言不随自然日期漂移 |
| QA-002 | P0 | 每个用例后关闭应用并恢复真实时钟 | 不污染同进程其他测试 |
| QA-003 | P1 | 记录根因、影响和完整回归证据 | 功能档案可追溯 |
## 数据与口径
测试系统时间固定为 `2026-08-18T03:00:00.000Z`,对应上海日期 `20260818`;夹具数据及生产新鲜度口径不变。
## 状态与异常
若用例中断,`afterEach` 仍负责关闭 Nest 应用并调用 `vi.useRealTimers()`;测试失败必须保留真实断言差异。
## 权限、合规与安全
测试不访问真实 TDX、数据库或公网服务,不读取 `.env.local`,不输出凭据、本机绝对路径或临时进程标识。
## 安全需求与信任边界
只修改测试运行时;禁止通过修改生产时间判断或把 `delayed` 强行改成 `fresh` 来通过测试。
## 性能目标与容量假设
不增加外部请求;定向 E2E 保持秒级完成,完整门禁耗时不应产生可感知增长。
## 关联模块与同步修改
只同步 Server E2E 测试和功能档案;HTTP/OpenAPI、Web API、消息、数据库、Redis、API 生产代码、Scheduler、Worker 和部署均不修改。
## 新增依赖评估
不新增依赖,使用现有 Vitest fake timers。
## 成功指标
定向 E2E 2/2 通过;完整 `pnpm verify` 通过;测试结束后无 fake timer 泄漏。
## 验收标准
- 当前自然日期下可复现的 2 个失败消失。
- 生产文件没有差异。
- GitNexus 仅识别预期测试和文档变化。
## 风险与依赖
残余风险是未来修改固定行情日期时必须同步测试时钟;代码注释明确该关联。
## 发布范围与回退触发条件
仅测试和文档。若测试时钟污染其他套件或隐藏真实延迟语义,回退本功能提交。
## 变更记录
- 0.1:建立跨日 E2E 时钟隔离需求。