본문 바로가기

과거공부모음

나의 개발일지 20221228 TIL(Today I learned) - Supertest

Today I learned

  • Supertest

오늘은 Supertest를 이용해서 가상 API요청을 보내고 원하는 결과를 받는지 점검하는 걸 진행했다

어제랑 오늘 jest와 Supertest를 이용해서 통합 테스트를 진행했다

테스트파일에서 API를 요청을 해야 하기 때문에 express의 객체인 app을 exports해서 테스트파일에서 사용한다

// app.js

...

moudule.exports = app;

그리고 Sequelize를 이용할 때 config에서 development말고 test라는 옵션이 있었다 이번에 테스트를 진행하기 위해서

Sequelize Test DB를 설정합니다

  "test": {
    "username": "root",
    "password": "0000",
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },

그리고 NODE_ENV 환경 설정에 test 환경으로 DB와 Table을 준비한다

# test 환경에 설정값을 이용해 DB를 생성합니다.
NODE_ENV=test npx sequelize db:create

# test 환경에 설정값을 이용해 Table을 생성합니다.
NODE_ENV=test npx sequelize db:migrate

기본적인 세팅이 끝났다 이제 테스트를 진행할 수 있다

테스트 코드에서 혹시 테이블이 없는 경우와 정말 큰 문제가 될 수 있는 test환경이 아니라 development환경이어서

실제로 사용해야하는 데이터베이스의 변경 및 삭제가 이루어질 수 있어서 beforeAll() 로직과 afterAll() 로직에 조건을 걸어야 한다

beforeAll(async () => {
  if (process.env.NODE_ENV === 'test') await sequelize.sync();
  else throw new Error('NODE_ENV가 test 환경으로 설정되어 있지 않습니다.');
});

test환경이 아니면 예외를 처리해서 환경을 잘 못 설정했을 때를 막을 수 있다 sequelize.sync(): 테이블이 없는 경우 새롭게 생성해서 테이블이 없어서 실패하는 경우를 방지한다

afterAll(async () => {
  if (process.env.NODE_ENV === 'test') await sequelize.sync({ force: true });
  else throw new Error('NODE_ENV가 test 환경으로 설정되어 있지 않습니다.');
});

test환경이아니면 예외를 처리해서 환경을 잘 못 설정했을 때를 막을 수 있다 sequelize.sync({force:true}) 여러개의 테스트 코드가 실행되면서 테스트 코드를 각각 DB를 초기화 시켜줘야 편하게 테스트 코드를 작성할 수 있다

 

오늘은 내가 만든 프로그램이 제대로 작동을 하는지 확인할 수 있는 매우 중요하다고 생각하는 테스트 코드를 할 수 있는 법을 배웠다 이제 프로그램을 만들고 테스트코드까지 만들어서 제대로 테스트를 할 수 있다 조금 더 안정적인 코드를 만들 수 있어진 거 같다