Language: English | 日本語
Accel Record Factory
This is a factory library for Accel Record.
Getting Started
npm install -D accel-record-factory
Add the configuration for prisma-generator-accel-record
to prisma/schema.prisma
.
generator client {
provider = "prisma-client-js"
output = "../src/prisma/client"
}
generator accelRecord {
provider = "prisma-generator-accel-record"
output = "../src/models"
factoryPath = "../tests/factories" // Add the output destination for factory files
}
After modifying prisma/schema.prisma
, run the following command:
npx prisma generate
For example, if you define a User model like this:
model User {
id Int @id @default(autoincrement())
firstName String
lastName String
age Int?
}
The following factory file will be automatically generated:
import { defineFactory } from "accel-record-factory";
import { User } from "../../src/models/index.js";
export const UserFactory = defineFactory(User, {
});
export { UserFactory as $User };
You can import and use the factory:
import { $User } from "./factories/user";
const newUser = $User.build();
const user = $User.create({
firstName: "John",
lastName: "Doe",
age: 20,
});
Usage
Setting Default Values
You can set default values by passing them as the second argument to defineFactory.
import { defineFactory } from "accel-record-factory";
import { User } from "../../src/models/index.js";
export const UserFactory = defineFactory(User, {
firstName: "John",
lastName: "Doe",
age: 20,
});
export { UserFactory as $User };
import { $User } from "./factories/user";
const newUser = $User.build();
newUser.firstName;
newUser.lastName;
newUser.age;
Using Sequential Numbers
When setting default values with defineFactory, you can use a function to utilize sequential numbers.
import { defineFactory } from "accel-record-factory";
import { User } from "../../src/models/index.js";
export const UserFactory = defineFactory(User, {
firstName: (seq) => `User${seq}`,
});
export { UserFactory as $User };
import { $User } from "./factories/user";
const user1 = $User.build();
user1.firstName;
const user2 = $User.build();
user2.firstName;
Generating Associations
By specifying a function for the default value, you can generate models with associations.
model User {
id Int @id @default(autoincrement())
firstName String
lastName String
age Int?
setting Setting?
}
model Setting {
id Int @id @default(autoincrement())
userId Int
user User @relation(fields: [userId], references: [id])
notify Boolean
}
import { defineFactory } from "accel-record-factory";
import { User, Setting } from "../../src/models/index.js";
export const UserFactory = defineFactory(User, {
setting: () => Setting.build({ notify: true }),
});
export { UserFactory as $User };
import { $User } from "./factories/user";
const user = $User.build();
user.setting.notify;
Traits
By specifying traits as the third argument to defineFactory, you can set multiple default values.
import { defineFactory } from "accel-record-factory";
import { User } from "../../src/models/index.js";
export const UserFactory = defineFactory(
User,
{
firstName: "John",
lastName: "Doe",
},
{
traits: {
foo: {
firstName: "Foo",
lastName: "Bar",
},
},
}
);
export { UserFactory as $User };
import { $User } from "./factories/user";
const john = $User.build({});
john.firstName;
john.lastName;
const foo = $User.build({}, "foo");
foo.firstName;
foo.lastName;