# 市场概览 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 时钟隔离需求。