Prisma Fabbrica 使用指南
1. 项目介绍
Prisma Fabbrica 是一个用于定义模型工厂的 Prisma 生成器。它可以帮助开发者在测试和数据填充过程中快速生成模型实例,简化数据创建和管理的复杂性。通过 Prisma Fabbrica,开发者可以轻松定义模型的默认值、序列字段、关系连接等,从而提高开发效率。
2. 项目快速启动
安装
首先,通过 npm 安装 prisma-fabbrica
:
npm install @quramy/prisma-fabbrica --save-dev
配置
在 prisma/schema.prisma
文件中添加 prisma-fabbrica
生成器配置:
generator client {
provider = "prisma-client-js"
}
generator fabbrica {
provider = "prisma-fabbrica"
}
生成代码
运行以下命令生成 JavaScript 和 TypeScript 类型定义文件:
npx prisma generate
生成的文件将位于 src/__generated__/fabbrica
目录下。
定义工厂
假设你的 schema.prisma
文件中有以下 User
模型:
model User {
id String @id
name String
posts Post[]
}
你可以通过以下方式定义 User
工厂:
// src/seed.ts
import { PrismaClient } from "@prisma/client";
import { initialize, defineUserFactory } from "src/__generated__/fabbrica";
const prisma = new PrismaClient();
initialize({ prisma });
async function seed() {
const UserFactory = defineUserFactory();
await UserFactory.create();
await UserFactory.create({ name: "Alice" });
await UserFactory.create({ id: "user002", name: "Bob" });
console.log(await prisma.user.count()); // -> 3
}
seed();
3. 应用案例和最佳实践
字段默认值
defineUserFactory
会自动填充模型中所有必需的标量字段。例如,以下 User
模型有 id
、email
、firstName
和 lastName
等必需字段:
model User {
id Int @id
email String @unique
firstName String
lastName String
middleName String?
createdAt DateTime @default(now())
}
使用 defineUserFactory
创建实例时,这些字段会自动填充:
const UserFactory = defineUserFactory();
await UserFactory.create();
使用序列字段
seq
参数可以为标量字段提供递增的序列号:
const UserFactory = defineUserFactory({
defaultData: async ({ seq }) => ({
id: `user${seq.toString().padStart(3, "0")}`,
}),
});
await UserFactory.create(); // 插入 id: "user000"
await UserFactory.create(); // 插入 id: "user001"
await UserFactory.create(); // 插入 id: "user002"
创建多个实例
createList
方法可以一次性创建多个实例:
await UserFactory.createList(3);
关系连接
在定义工厂时,可以通过 related model factory
自动连接关系字段:
const UserFactory = defineUserFactory();
const PostFactory = definePostFactory({
defaultData: {
author: UserFactory,
},
});
4. 典型生态项目
Jest-Prisma
如果你使用 @quramy/jest-prisma
或 @quramy/jest-prisma-node
,可以通过以下配置将 prisma-fabbrica
集成到 Jest 测试环境中:
// jest.config.mjs
export default {
preset: "ts-jest",
transform: {
"^.+\\.tsx?$": "ts-jest",
},
testEnvironment: "@quramy/jest-prisma/environment",
setupFilesAfterEnv: ["@quramy/prisma-fabbrica/scripts/jest-prisma"],
};
这个配置会自动初始化 prisma-fabbrica
,并将 Prisma 客户端配置为与 jest-prisma
管理的交易集成。