Skip to content

Production Testing

athenavi edited this page Oct 9, 2026 · 1 revision

生产使用:测试与评测

权威来源:docs/contributing.md(CI 五个 job)· python-engine/evals/README.md(评测套件)· transcript 契约(这块怎么测)。

四层测试,各管一段

层 位置 跑法
Go 单测 internal/**/*_test.go go test -mod=mod ./... -count=1
Python 单测 python-engine/tests/ python -m pytest -q -m "not integration"
集成测试 同上,-m integration 需真实 PG + Redis + 网关
前端测试 frontend-vue/src/**/__tests__/ pnpm run test(vitest + jsdom)
评测套件 python-engine/evals/ 见 evals/README.md(E1 / E2 / E3)

集成测试要"真实栈"

integration 标记的用例需要真 PostgreSQL + Redis,还要把网关也起起来 (引擎侧统一客户端会走网关的 /v1/internal/*):

redis-server --port 6390 --appendonly no --save ""
REDIS_ADDR=127.0.0.1:6390 go run ./cmd/chiron
POSTGRES_DSN=<来自 .env> REDIS_URL=redis://127.0.0.1:6390/0 \
  python -m pytest -q -m integration

本机没有真实栈时不要假装跑过 —— 把没跑的项写下来(这是本仓库的一贯做法)。

前端怎么测"几何与滚动"

transcript 的 7 个模块是纯几何(不碰 DOM)⇒ 可以用事件序列做确定性回归, 不需要浏览器。列表容器(MessageList)的窗口化与锚定用 jsdom + @vue/test-utils 测。

已知的边界:没有浏览器级 e2e 测试。这是 UI/UX 差距分析里指出的最大系统性差距 (测试/源码字节比 0.11× vs 对标项目 0.77×)。补它不需要新依赖,缺的是接缝 (把内核换成可脚本化的假实现)。

测试自身的纪律

  • 一个测试必须能观察到它声称的东西 —— 例如:$emit 之后同步读 props 是读不到新值的 (Vue 会批量传播),要 await nextTick() 或读父组件的 setup 状态。
  • 断言失败时先分清"代码错"还是"我对代码的模型错" —— 后者很常见。
  • flaky 的第二次出现,才是"记录它"变成"修它"的临界点(第一次应先取证)。

延伸阅读


本页由仓库内 docs/wiki/ 同步生成(scripts/sync_github_wiki.py)。请不要直接编辑本 wiki —— 改动会下次同步时被覆盖;请改仓库里的对应文件。

Clone this wiki locally