更新时间:2026-07-08
本文面向公开同步,只描述测试分层、覆盖原则和质量门禁。具体 CI 配置、内部辅助端点、测试账号、报告路径和临时排障命令不在本文维护。
BestBlogs 的测试体系服务三个目标:
- 快速反馈:日常开发能尽快发现明显回归。
- 关键链路可信:发布前覆盖登录、阅读、Pro、早报、推荐、设置和管理后台等核心路径。
- 边界不漂移:安全、隐私、Pro 门禁、公共 / 私有内容边界和反骚扰红线都有回归保护。
| 层级 | 目标 | 典型覆盖 |
|---|---|---|
| L0 Unit | 验证纯逻辑和组件局部行为 | Domain Service、工具函数、React 组件、DTO 映射 |
| L1 Integration | 验证模块间契约 | Controller、Repository、参数配置、API client、权限边界 |
| L2 E2E / Smoke | 验证用户主链路 | 登录、浏览、阅读、Pro 门禁、早报、设置、管理后台关键操作 |
日常开发优先跑 L0 / L1;发布前补齐 L2 smoke。高风险改动需要提升验证层级。
- 核心领域逻辑优先写单元测试,避免只靠 Controller 测试兜底。
- Repository / MongoDB 行为使用可重复的集成测试,不依赖开发者本机已有数据。
- 参数化能力统一经过配置读取服务,测试需覆盖默认值、显式配置和关闭态。
- 外部服务使用 Adapter 边界隔离,测试中使用 mock / fake,禁止真实密钥和真实外部写操作。
- Job、锁、重试和幂等逻辑需要覆盖重复执行、部分失败和关闭开关。
- 组件测试关注用户可见行为,而不是内部状态。
- API client 测试覆盖成功、失败、401 / 403、空数据和异常响应。
- 涉及登录态的页面必须覆盖匿名、已登录 Free、Pro 三种状态。
- 响应式、暗色模式和可访问性问题优先通过 smoke / 截图 / 手工验证结合发现。
- 用户可控跳转必须覆盖安全重定向逻辑,禁止开放重定向。
Mobile 项目当前暂缓。后续重启时,至少遵循:
- 登录、刷新、退出、账号删除和 Pro 权益同步属于高风险链路,必须有回归测试。
- 离线、弱网、401 自动恢复和本地安全存储需要单独覆盖。
- Mobile 与 Web 共用产品边界:Pro 门禁、内容可见性、隐私过滤和事件脱敏不允许分叉。
- CLI 默认测试不依赖线上服务。
- OpenAPI 测试必须覆盖鉴权、限流、分页、错误格式和用户数据隔离。
- 对外响应保持统一 envelope,字段变更需要评估兼容性。
| 能力 | 必须覆盖 |
|---|---|
| 公共策展层 | 每日早报、精选周刊、主题解读、内容广场匿名可读与降级态 |
| 我的空间 | 我的早报、我的关注、我的阅读、我的回顾的 Free / Pro 边界 |
| AI 伴读 | 配额、流式响应、失败恢复、引用来源和隐私过滤 |
| 沉浸式翻译 | 配额、缓存、不同内容类型、失败不重复扣减 |
| 推荐与兴趣 | 关注、阅读、反馈行为能写入画像并影响解释 |
| Pro 订阅 | 试用、开通、到期、取消、跨端状态一致 |
| 管理后台 | 参数配置、内容审核、运营编辑和权限边界 |
| 安全 | HttpOnly Cookie、代理层白名单、内部端点保护、安全重定向 |
禁止:
- 只断言「不报错」或只看 snapshot;
- 使用真实密钥、真实生产账号或不可重复的线上数据;
- 在测试中放宽安全限制;
- 为了让测试通过而绕过 Pro、权限或隐私边界。
必须:
- 断言用户可见结果、响应状态和关键副作用;
- 覆盖成功、失败和关闭态;
- 对涉及计费、配额、权限和数据隔离的改动增加边界用例;
- 为已修复的线上回归补最小复现测试。
发布前至少完成:
- 受影响模块的 L0 / L1 测试。
- 核心用户链路 smoke。
- 与改动相关的权限、Pro、隐私和降级验证。
- 文档与代码事实检查。
如果某项验证无法执行,需要在发布说明中写清楚原因、风险和替代验证方式。
- 产品能力和入口:
2-PRODUCT.md - 架构边界:
4-ARCHITECTURE.md - 开发规范:
7-CONVENTIONS.md - 运维和回滚原则:
11-OPERATIONS.md