From 911cc9cc2393d7a7335b41e9f3ac669f65e43dad Mon Sep 17 00:00:00 2001 From: Joywayer Date: Wed, 1 Jul 2026 18:34:43 +0800 Subject: [PATCH] =?UTF-8?q?CLAUDE.md=EF=BC=9A=E8=A1=A5=E5=85=85=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=BA=AA=E5=BE=8B=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 明确测试代码可不守 ES5、正式代码禁止为测试服务、禁止为通过率降标准、 测试失败先裁根因、用例需覆盖正反面与边界。 Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 33cbd9c..e0a5963 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -95,6 +95,18 @@ server/<游戏容器目录>/<游戏>/ ← 子游戏接入后**唯一 - 对影响发牌/庄家/手牌/计分/重连的权威数据,禁止用默认值掩盖缺失(`|| 0`、`|| []`、`|| ''`)——应直接显式报错;默认值仅允许用于纯展示/日志字段。 - 一个职能只在一个模块实现——需要该能力时调用其所属模块,而不是在别处重新实现一份。 +## 测试纪律 + +与 `docs/client/development-guide/05` §10、`docs/server/development-guide/04` §10 一致,是本项目对测试代码的硬性要求: + +- **测试代码可以不守严格 ES5**:严格 ES5 是为了兼容线上浏览器/友乐运行时;测试只跑在 Node(本地/CI),不上线,不受此限制,可用现代语法写测试。 +- **正式代码(待测代码)禁止出现专为测试服务的逻辑**:不允许在核心业务代码里写"仅单测传 X 时……"之类的分支、专供测试用的钩子/后门、为了可测性而放宽的校验。 +- **严禁为了让测试通过而修改正式代码**:除非确认是正式代码本身有业务缺陷(这种情况按缺陷修复处理,而不是"为了兼容测试");否则正式代码的行为不因测试而改变。 +- **严禁为了测试通过率而降低测试标准**:不允许 skip/条件 return、软化断言、放宽阈值、try-catch 吞异常、把硬断言改成"存在才校验"等任何掩盖手段。 +- **方向唯一**:正式代码服务生产,不服务测试——测试要适配正式代码的生产契约(真实的输入形状、真实的调用方式),而不是让正式代码迁就测试的简化输入/不规范 stub。 +- **失败先裁根因**:测试失败时先用证据(打印中间态、最小复现)裁定是【业务代码缺陷】还是【测试脚本缺陷】,禁止凭猜测下结论;业务缺陷修业务、脚本缺陷修脚本,两者都保持/恢复硬断言。 +- **用例要全面**:新增或修改测试时,正面用例(正常路径/合法输入)、反面用例(非法输入/错误路径/异常分支)、边界用例(空值、极值、临界条件、越界)三类都要覆盖,不能只测 happy path。 + ## Git 提交 本仓库已初始化 git(见根目录 `.gitignore`)。提交纪律与 `docs/server/development-guide/04-开发规范与红线.md` §11 一致: