Skip to content

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.

Notifications You must be signed in to change notification settings

hodfords-solutions/nestjs-seeder

Repository files navigation

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

About

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.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •