用途
Test Data Factory Builder 用于创建测试数据工厂(Factory)与构建器(Builder),以生成一致、可组合的测试数据。它面向需要在测试中准备结构化数据的开发者,帮助减少重复的数据构造代码,并让测试数据具备真实感与关联关系。
主要能力
该技能围绕以下模式与能力展开:
- 工厂模式(Factory Pattern):通过类与静态方法创建对象,支持传入 overrides 覆盖默认值,并提供链式方法(如 withEmail、withRole、asAdmin)逐步定制数据。
- 构建器模式(Builder Pattern):以链式调用逐步组装复杂对象(如订单),支持 forUser、withItem、withStatus、asPaid 等方法,并在 build 时进行必要校验与计算(如订单总价)。
- 关联关系处理(Relationship Handling):在创建订单等对象时自动创建关联的用户与产品,并填充外键与嵌套对象。
- 数据库持久化(Database Persistence):工厂可接收 PrismaClient 等数据库客户端,提供 create、createMany、createAdmin 等方法,将生成的数据写入数据库。
- 特征模式(Traits Pattern):通过 withTrait 添加如 verified、suspended、premium 等特征,改变生成对象的字段。
- 序列生成(Sequence Generation):使用计数器为同一键生成递增序号,用于生成如 user1@example.com、user2@example.com 等唯一值。
- 可组合工厂(Composable Factories):通过统一的 TestDataBuilder 对象组合多个工厂,构建如 checkoutScenario 的复合场景数据。
- 真实数据生成器(Realistic Data Generators):基于 faker 生成信用卡、地址、产品、邮箱等贴近真实的数据,并区分有效、无效、一次性邮箱等变体。
- 工厂注册表(Factory Registry):通过注册表按名称注册与创建工厂,支持传入 overrides。
- 测试辅助函数(Test Helpers):提供 seedTestDatabase 等函数,批量创建用户、产品及其关联订单,便于在 beforeEach 中初始化测试数据库。
使用方式
资料中给出的示例均使用 TypeScript,并依赖 @faker-js/faker 生成随机数据。典型用法包括:
- 直接调用工厂静态方法:
UserFactory.create()、UserFactory.create({ email: "test@example.com" })。 - 链式构建:
UserFactory.create().asAdmin().build()。 - 构建器组装:
await new OrderBuilder().forUser(user).withItem(laptop, 2).withItem(phone, 1).asPaid().build()。 - 数据库持久化:
new UserFactory(prisma).createMany(5)。 - 特征组合:
new UserFactory().withTrait("suspended").withTrait("premium").build()。 - 复合场景:
await TestDataBuilder.checkoutScenario()。 - 注册表创建:
registry.create("user", { role: "ADMIN" })。 - 测试初始化:在
beforeEach中调用seedTestDatabase(prisma)。
适用场景
适用于需要为单元测试、集成测试准备测试数据的项目,尤其是使用 TypeScript 且需要处理对象关联关系、数据库持久化、多变体数据(如管理员、已暂停、高级用户)以及复合业务场景(如结账流程)的测试场景。
限制
资料未提供该技能的安装方式、运行环境要求、支持的测试框架范围、是否支持 TypeScript 以外的语言、性能与并发方面的说明,也未提供收费、价格或平台信息。以上内容暂未提供。