用途:提供编写测试的通用规则,与语言无关,示例为 JavaScript,可迁移到其他语言。若与语言特定指南(如 typescript-test-guidelines)冲突,以语言特定指南为准。
主要能力与约定: 定义三类测试。单元测试隔离验证单个模块行为,必要时用 mock 和 stub,测试文件扇出应低;集成测试验证多模块交互,允许中等扇出;端到端测试验证整个系统,外部服务应被 mock,扇出应低,通常只导入 fixtures 和搭建被测系统所需工具。 测试金字塔:优先单元测试,其次集成测试,最后 e2e。只有行为无法用集成或单元测试充分覆盖时才写 e2e;无法用单元测试覆盖时才写集成测试。理想项目应有许多单元测试、一些集成测试和少量 e2e 测试。 魔法数字:少用,优先使用具名 fixtures,如 MAX_ITERATIONS;上下文明显时可例外,如 expect(emptyArray).toHaveLength(0)。 测试结构:按 arrange / act / assert 组织,用空行分隔;断言数量尽量少,理想为一个;把准备代码提取到 before 钩子或 setup 函数。 Mock:不要测试 mock 本身。若删除真实实现后所有断言仍通过,该测试无价值。 避免 try-catch:让错误直接使测试失败。 避免条件分支:用断言替代 if 分支,直接断言整个对象形状。 数组:断言库支持时用单次检查,如 vitest 的 arrayContaining,而非多个 toContain。 应避免:测试常量、测试配置、为测试导出模块内部、测试“不抛错”、为可测试性添加生产代码(test id 除外,如 data-testid)。核心功能难以通过公共 API 测试时,应拆分模块。 标题:避免过于具体,如用“Exits when login fails”而非“Exits 11 when login fails”,以免标题与断言不同步。
限制:资料未提供安装命令、平台、收费或价格信息。