Skip to main content

@hodfords/nestjs-seeder

Hodfords Logo

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