Node.js

[NestJS] e2e테스트 Jest 테스트 시 DB 초기화하는 법

임채성 2022. 10. 7. 16:00

e2e 테스트는 매번 데이터베이스를 초기화해줄 필요가 있습니다.

다만.. 저는 Jest를 쓰는데 따로 초기화 해주는 함수가 없었습니다.

(있으면 알려주세요!)

 

그런 이유로 방법 계속 찾아봤는데 따로 메소드를 제공해주지 않아서 팁 정도를 찾아서 이를 공유하고자 합니다.

 

import { Test, TestingModule } from '@nestjs/testing';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Connection } from 'typeorm';

import ormConfig from './orm-config';

import { AppController } from '@app/app.controller';
import { UserModule } from '@app/user/user.module';
import { User } from '@domain/user/user.entity';

describe('App Module Integration', () => {
  let app;

  beforeAll(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [
        TypeOrmModule.forFeature([User]),
        TypeOrmModule.forRoot(ormConfig),
        UserModule,
      ],
      controllers: [AppController],
    }).compile();

    app = moduleFixture.createNestApplication();
    const connection = app.get(Connection);
    await connection.synchronize(true);
    await app.init();
  });
  
  afterEach(async () => {
    const connection = app.get(Connection);
    await connection.synchronize(true);
  });
  
  
  it('e2e 테스트 작동 확인', () => {
    return request(app.getHttpServer())
      .get('/hello?name=world')
      .expect(200)
      .expect('Hello world!');
  });
});

e2e테스트 구조는 https://github.com/mutoe/nestjs-realworld-example-app/tree/master/test 참고했습니다.

 

GitHub - mutoe/nestjs-realworld-example-app: Use TDD to develop a Realworld project based on Nestjs + TypeORM

Use TDD to develop a Realworld project based on Nestjs + TypeORM - GitHub - mutoe/nestjs-realworld-example-app: Use TDD to develop a Realworld project based on Nestjs + TypeORM

github.com

 

 

afterEach(async () => {
  const connection = app.get(Connection);
  await connection.synchronize(true);
});

https://github.com/nestjs/nest/issues/409#issuecomment-390569628

 

TypeOrm: clear database when testing · Issue #409 · nestjs/nest

Hi!. Nice work with the TypeOrmModule, I really enjoy it. I'm wondering how can I clear the database (or even drop it) before each test, in order to isolate tests from pevious tests and previou...

github.com

강제로 데이터베이스를 동기화때려서 초기화했습니다..