Files

2.9 KiB

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