SuperAPI AI 工具集

syncable-entity-testing

测试与质量

查看项目

更新于 10-16 04:01

技能介绍

用途

该技能用于 Twenty 代码库本身(twentyhq/twenty 服务端内部)的可同步实体(syncable entity)集成测试编写,是「创建可同步实体」工作流的第 6 步(共 6 步),也是强制步骤(MANDATORY)。它不适用于基于 Twenty 构建应用。其目标是在完成第 1 至第 5 步后,为可同步实体创建全面的集成测试套件,覆盖所有校验场景、输入转译异常以及成功用例。文档明确说明:所有可同步实体都必须有集成测试。

主要能力与测试覆盖要求

测试需要覆盖两类场景:失败场景,包括所有校验器(validator)异常和输入转译错误;成功场景,包括所有 CRUD 操作与边界情况。文档还要求创建可复用的查询工厂和辅助函数作为测试工具,并采用两文件模式(查询工厂 + 包装器)覆盖每个操作。

失败创建测试需覆盖:缺失必填字段、空字符串、无效格式、唯一性冲突、标准实体保护、外键校验,以及在适用时覆盖 JSONB 属性校验。文档在测试覆盖清单中还列出:缺失必填字段、空字符串校验、唯一性冲突、标准实体保护、外键校验;成功测试需覆盖:最小输入创建、全部可选字段创建、输入清理(空白字符)、长文本内容、更新单个字段、更新多个字段、成功删除。文档示例还展示了特殊字符的覆盖项。

使用方式

文档以分步形式给出实现方法。第 1 步创建测试工具,按「查询工厂」与「包装器工具」两种模式,分别提供创建、更新、删除三组工具文件,共至少 6 个文件:

  • create-my-entity-query-factory.util.ts + create-my-entity.util.ts
  • update-my-entity-query-factory.util.ts + update-my-entity.util.ts
  • delete-my-entity-query-factory.util.ts + delete-my-entity.util.ts

第 2 步编写失败创建测试,使用 eachTestingContextFilter 与类型化测试上下文,覆盖输入转译校验(如 name 缺失、label 缺失、name 为空字符串)、校验器业务逻辑(如 name 已存在、尝试创建标准实体)、外键校验(如 parentEntityId 不存在)等用例,并以 expectOneNotInternalServerErrorSnapshot 做快照断言。

第 3 步编写成功创建测试,覆盖最小必填输入、全部可选字段、输入清理(去除首尾空白字符)、长文本内容等场景。

第 4 步要求为更新与删除操作创建类似测试文件,需包含:

  • failing-my-entity-update.integration-spec.ts
  • successful-my-entity-update.integration-spec.ts
  • failing-my-entity-deletion.integration-spec.ts
  • successful-my-entity-deletion.integration-spec.ts

测试最佳实践包括:afterEach 清理、as const satisfies 的类型安全输入、快照测试。文档给出的运行命令为:

# Run all entity tests
npx jest test/integration/metadata/suites/my-entity --config=packages/twenty-server/jest.config.mjs

# Run specific test file
npx jest test/integration/metadata/suites/my-entity/failing-my-entity-creation.integration-spec.ts --config=packages/twenty-server/jest.config.mjs

# Update snapshots
npx jest test/integration/metadata/suites/my-entity --updateSnapshot --config=packages/twenty-server/jest.config.mjs

适用场景

在 Twenty 仓库内贡献服务端元数据模块、为可同步实体补齐集成测试时使用。文档明确其触发条件:完成第 1 至第 5 步之后。完整工作流参见 creating-syncable-entity 规则。

限制与成功标准

集成测试被视为完成需满足:全部测试工具已创建(至少 6 个文件)、失败创建测试覆盖所有校验器、失败更新测试覆盖业务规则、失败删除测试覆盖保护规则、成功测试覆盖所有用例、所有快照已生成并提交、所有测试稳定通过、测试覆盖率满足要求(大于 80%)。文档未提供该技能本身的收费、价格或平台信息。