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를 초기화 시켜줘야 편하게 테스트 코드를 작성할 수 있다
오늘은 내가 만든 프로그램이 제대로 작동을 하는지 확인할 수 있는 매우 중요하다고 생각하는 테스트 코드를 할 수 있는 법을 배웠다 이제 프로그램을 만들고 테스트코드까지 만들어서 제대로 테스트를 할 수 있다 조금 더 안정적인 코드를 만들 수 있어진 거 같다
'과거공부모음' 카테고리의 다른 글
나의 개발일지 WIL(Weekly I learned) 2022-01-01 (1) | 2023.01.01 |
---|---|
나의 개발일지 20221229 TIL(Today I learned) - 호이스팅, var, let, const (0) | 2022.12.29 |
나의 개발일지 20221227 TIL(Today I learned) - jest (0) | 2022.12.27 |
나의 개발일지 20221226 TIL(Today I learned) - socket.io (0) | 2022.12.26 |
나의 개발일지 WIL(Weekly I learned) 2022-12-25 (0) | 2022.12.26 |