DEV Community

mark vachi
mark vachi

Posted on • Edited on

NestJs: สร้าง Unit test สำหรับทดสอบ Service ที่ใช้ typeorm + mysql

ใน task.service.ts ใช้ Repository<Task> ตามแบบของ Typeorm

// task.servic.ts @Injectable() export class TaskService { constructor( @InjectRepository(Task) private readonly taskRepository: Repository<Task>, ) {} ... } 
Enter fullscreen mode Exit fullscreen mode

เราสามารถ config TypeOrmModule.forRoot และ TypeOrmModule.forFeature แบบเดียวกับที่ทำใน AppModule ได้เลย และจะให้ Clean ก็แยกออกมาอีก 1 file เพื่อจะได้ใช้ test กันส่วนอื่นๆ ด้วย

สร้าง src/test-utils/TypeORMMySqlTestingModule.ts

// src/test-utils/TypeORMMySqlTestingModule.ts import { TypeOrmModule } from '@nestjs/typeorm'; export const TypeORMMySqlTestingModule = (entities: any[]) => [ TypeOrmModule.forRoot({ type: 'mysql', host: process.env.MYSQL_HOST || 'localhost', port: 3306, username: process.env.MYSQL_USERNAME || 'nest', password: process.env.MYSQL_PASSWORD || 'nest', database: process.env.MYSQL_DATABASE || 'test', entities: [...entities], synchronize: true, }) TypeOrmModule.forFeature([Task]), ]; 
Enter fullscreen mode Exit fullscreen mode

imports เข้าไปใน TestingModule

// task.service.spac.ts ... beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ imports: [...TypeORMMySqlTestingModule([Task])], providers: [TaskService], }).compile(); service = module.get<TaskService>(TaskService); }); ... 
Enter fullscreen mode Exit fullscreen mode

Run test เลย

$ yarn test src/task/task.service.spec.ts 
Enter fullscreen mode Exit fullscreen mode

enjoy your test

Ref

Top comments (0)