-
test: 翻译认证与账号管理的 25 条单元测试 · 9742b99a
对应 Java 侧三个测试类,逐条保留原有断言意图: - InMemoryLoginAttemptGuardTest 9 条 -> login-attempt.service.spec.ts - AuthServiceTest 9 条 -> auth.service.spec.ts - SystemUserAdminServiceTest 7 条 -> system-user.service.spec.ts 这些用例守的是接口对拍看不到的内部行为: 登录防枚举 账号不存在、已停用、未设密码三种情况都必须真的执行一次密码比对, 且所有失败路径的耗时补齐到同一下限。从响应上看这三种情况都是同一句 「账号或密码错误」,只有单元测试能验证内部确实付出了相同代价。 被锁定的账号还必须在查数据库之前就被拒绝,避免查库耗时泄露账号是否存在。 会话失效 改动角色、状态或页面权限后,对方令牌里的 auth_version 必须失配从而立即失效; 提交内容与原值一致时则保留原登录,不无谓地踢人下线。四条用例分别覆盖。 漏掉自增,权限修改要等对方令牌自然过期(8 小时)才生效,期间界面无任何异常。 两处实现差异(有意,已在测试注释中说明) - Java 用 8 线程并发验证计数不丢不重;Node 单线程执行同步方法本无竞态, 改为验证等价语义:19 次不锁、第 20 次锁,计数既不多算也不少算。 - bcrypt 是原生模块,其导出属性无法 spyOn,改用模块级 mock。 时间用可控时钟推进,不真实等待 24 小时。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
DaiJiezhang authored
Analyzing file…
×