@hodfords/nestjs-seeder
nestjs-seeder streamlines the process of populating your NestJS application with mock data. It makes it easy to generate and manage seed data, ideal for testing and simulating API responses.
Installation 🤖
Install the nestjs-seeder
package with:
npm install @hodfords/nestjs-seeder --save
Usage 🚀
To seed fake user data into your database, follow these 6 steps:
1. Define the Factory
First, create a factory for UserEntity. This factory will generate fake data for user records.
user.factory.ts
import { define } from '@hodfords/nestjs-seeder';
interface SeedUserOptions {
countryId: string;
}
class UserEntity {
name: string;
age: string;
countryId: string;
createdAt: Date;
}
define(UserEntity, (options: SeedUserOptions) => {
const user = new UserEntity();
user.name = faker.name.title();
user.age = faker.datatype.number(100);
user.createdAt = faker.date.future();
return plainToClassFromExist(user, options || {});
});
2. Create the BaseSeeder
Create a base seeder class that will be used to configure and run your seeding logic.
base.seeder.ts
import { Test } from '@nestjs/testing';
import { AppModule } from '~app.module';
import { databaseConfig } from '~config/database.config';
import { BaseSeeder as AbstractSeeder } from '@hodfords/nestjs-seeder';
export abstract class BaseSeeder extends AbstractSeeder {
createModule() {
return Test.createTestingModule({
imports: [AppModule, databaseConfig]
}).compile();
}
abstract run(): Promise<void>;
}
3. Create the UserSeed
Implement a seeder class that extends BaseSeeder. Use the factory methods to generate and save data.
There are 3 methods to seed a fake data from factory method
createOne(options?: any): Entity;
saveOne(options?: any): Promise<Entity>;
saveMany(count: number, options?: any): Promise<Entity[]>;
user.seed.ts
import { BaseSeeder } from '~core/seeders/base-seeder';
import { factory } from '@hodfords/nestjs-seeder';
import faker from 'faker';
export class UserSeed extends BaseSeeder {
async run() {
const countryId = (await factory(CountryEntity)).id;
await factory(UserEntity).saveOne({ countryId }); // 1
factory(UserEntity).createOne({ countryId }); // 2
await factory(UserEntity).saveMany(100, { countryId }); // 3
}
}
4. Create the seedConfig
Set up the seed configuration to include your seed classes.
import { SeederModule } from '@hodfords/nestjs-seeder';
export const seedConfig = SeederModule.forRoot([UserSeed]);
5. Import seedConfig into AppModule
Integrate the seed configuration into your main application module.
@Module({
imports: [seedConfig],
controllers: [AppController],
providers: []
})
export class AppModule {}
6. Run the seeder
Execute the seeder command to populate your database with the defined fake data.
wz-command seeder
License 📝
This project is licensed under the MIT License