작성
·
54
0
supertest 를 통해서 다른 라우터도 테스트 코드를 생성하려고 했는데요
각각의 supertest 파일에서 sequelize.sync({force:true})가 병렬로 실행되니까 전체적인 테스트가 끝나지 않았는데 위 코드로 인해 DB가 초기화 되어버려 테스트를 실패하는 케이스가 발생했습니다.
이게 항상 발생하는 것도 아니고 테스트 수행 시간이 달라짐에 따라 결과가 매번 다르더라구요.
그래서 이 부분을 어떻게 해결해야하는지 찾아보려고 했으나 검색 키워드를 잘몰라서 도움이 될만한 정보를 찾지 못했습니다.
혹시 이런 부분은 어떻게 해야하나요?
[제로초 강좌 질문 필독 사항입니다]
질문에는 여러분에게 도움이 되는 질문과 도움이 되지 않는 질문이 있습니다.
도움이 되는 질문을 하는 방법을 알려드립니다.
https://www.youtube.com/watch?v=PUKOWrOuC0c
0. 숫자 0부터 시작한 이유는 1보다 더 중요한 것이기 때문입니다. 에러가 났을 때 해결을 하는 게 중요한 게 아닙니다. 왜 여러분은 해결을 못 하고 저는 해결을 하는지, 어디서 힌트를 얻은 것이고 어떻게 해결한 건지 그걸 알아가셔야 합니다. 그렇지 못한 질문은 무의미한 질문입니다.
1. 에러 메시지를 올리기 전에 반드시 스스로 번역을 해야 합니다. 번역기 요즘 잘 되어 있습니다. 에러 메시지가 에러 해결 단서의 90%를 차지합니다. 한글로 번역만 해도 대부분 풀립니다. 그냥 에러메시지를 올리고(심지어 안 올리는 분도 있습니다. 저는 독심술사가 아닙니다) 해결해달라고 하시면 아무런 도움이 안 됩니다.
2. 에러 메시지를 잘라서 올리지 않아야 합니다. 입문자일수록 에러메시지에서 어떤 부분이 가장 중요한 부분인지 모르실 겁니다. 그러니 통째로 올리셔야 합니다.
3. 코드도 같이 올려주세요. 다만 코드 전체를 다 올리거나, 깃헙 주소만 띡 던지지는 마세요. 여러분이 "가장" 의심스럽다고 생각하는 코드를 올려주세요.
4. 이 강좌를 바탕으로 여러분이 응용을 해보다가 막히는 부분, 여러 개의 선택지 중에서 조언이 필요한 부분, 제 경험이 궁금한 부분에 대한 질문은 대환영입니다. 다만 여러분의 회사 일은 질문하지 마세요.
5. 강좌 하나 끝날 때마다 남의 질문들을 읽어보세요. 여러분이 곧 만나게 될 에러들입니다.
6. 위에 적은 내용을 명심하지 않으시면 백날 강좌를 봐도(제 강좌가 아니더라도) 실력이 늘지 않고 그냥 코딩쇼 관람 및 한컴타자연습을 한 셈이 될 겁니다.
답변 2
0
네 테스트를 병렬로 수행하지 않는게 방법이나 병렬이 아니므로 속도가 느려질 수 있고요. force: true를 끄고 테스트간에 데이터가 서로 안 겹치게 잘 조절하는 방법도 있습니다.
0
안녕하세요, 인프런 AI 인턴입니다.
우지원님께서 supertest와 sequelize.sync({force:true}) 사용 시 발생하는 DB 초기화 문제에 대해 질문을 주셨군요. 여러 테스트가 동시에 실행되면서 force: true
옵션으로 인해 데이터베이스가 초기화되는 문제는 일반적으로 다음과 같은 방법으로 해결할 수 있습니다.
sequelize.sync({force:true})
는 데이터베이스를 초기화하기 때문에, 병렬로 테스트가 실행되는 경우 예상치 않은 시점에 DB가 초기화될 수 있습니다.
테스트 분리하기:
트랜잭션 사용하기:
데이터베이스 셋업 및 테어다운 함수 작성하기:
개별 데이터베이스 사용하기:
관련하여 추가 학습이 필요하시면 아래 링크들을 참조해 보세요:
- 제로초님의 유사 질문 및 답변 모음
- 시퀄라이즈 공식 문서 - 트랜잭션 사용 예시
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.