inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

통합 테스트 해보기

다수의 supertest 가 실행될 때 force:true로 인한 DB 초기화 문제

128

우지원

작성한 질문수 3

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. 위에 적은 내용을 명심하지 않으시면 백날 강좌를 봐도(제 강좌가 아니더라도) 실력이 늘지 않고 그냥 코딩쇼 관람 및 한컴타자연습을 한 셈이 될 겁니다.

node.js mysql mongodb express typescript socket.io jwt

답변 2

0

제로초(조현영)

네 테스트를 병렬로 수행하지 않는게 방법이나 병렬이 아니므로 속도가 느려질 수 있고요. force: true를 끄고 테스트간에 데이터가 서로 안 겹치게 잘 조절하는 방법도 있습니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

우지원님께서 supertest와 sequelize.sync({force:true}) 사용 시 발생하는 DB 초기화 문제에 대해 질문을 주셨군요. 여러 테스트가 동시에 실행되면서 force: true 옵션으로 인해 데이터베이스가 초기화되는 문제는 일반적으로 다음과 같은 방법으로 해결할 수 있습니다.

문제의 핵심

sequelize.sync({force:true})는 데이터베이스를 초기화하기 때문에, 병렬로 테스트가 실행되는 경우 예상치 않은 시점에 DB가 초기화될 수 있습니다.

해결 방법

  1. 테스트 분리하기:

    • 테스트를 병렬로 실행하지 않고, 순차적으로 실행하게끔 설정을 조정해주세요. 대부분의 테스트 프레임워크는 병렬 테스트를 비활성화 할 수 있는 옵션을 지원합니다.
  2. 트랜잭션 사용하기:

    • 각 테스트 케이스마다 트랜잭션을 시작하고 끝낼 수 있습니다. 트랜잭션을 활용하면 테스트가 끝난 후 롤백을 통해 DB의 상태를 유지할 수 있습니다.
  3. 데이터베이스 셋업 및 테어다운 함수 작성하기:

    • 각 테스트 파일마다 별도의 데이터베이스 설정(setup)과 정리(teardown) 로직을 작성하여 테스트 간의 간섭을 최소화하세요.
  4. 개별 데이터베이스 사용하기:

    • 테스트마다 서로 다른 데이터베이스 인스턴스를 사용할 수 있습니다. 이는 일반적으로 Docker나 CI 환경에서 더 쉽게 구현할 수 있습니다.

관련하여 추가 학습이 필요하시면 아래 링크들을 참조해 보세요:
- 제로초님의 유사 질문 및 답변 모음
- 시퀄라이즈 공식 문서 - 트랜잭션 사용 예시

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

깃헙 질문

0

78

2

강의 1-1 수업노트의 로드맵 링크가 작동하지 않습니다.

0

73

1

aws - lightsail 이용 관련

0

55

1

4강 http 서버 만들때 ESM방식으로 해도 될까요?

0

76

2

모듈 사용 시 단점이 있나요?

0

76

1

node.js 버전 및 typescript 적용 문의

0

90

2

12.7. 방장기능(강퇴) 질문드립니다.

0

77

2

12.7 socket.js코드 그대로 뱃겨서 했는데, socket.request.session.color가안나오네요

0

66

1

12.7 코드 그대로 뱃겨서 햇는데 스샷같이 오류가뜹니다.

0

72

2

12.7.1스스로 해보기 질문되나요

0

86

3

시퀄라이즈 실습하기 질문드립니다.

0

178

9

<7-5. 시퀄라이즈 사용하기>수업 질문 드립니다.

0

92

2

크롬에서 user id를 인풋에 입력하고 등록하면 404 에러처리 페이지가 뜹니다.

0

108

2

구매 결제관련 질문입니다 !

0

118

1

node 설치 방법이 전혀다르게 바뀐것 같습니다.

0

145

2

12강 깃허브에 있는 12.7 chat.html 복붙했는데 css오류

0

118

2

무료/프리미엄 동시 소유 시 질문

0

112

1

비주얼 스튜디오 코드로 계속 진행해도 괜찮을까요?

0

132

2

10강 cors에러 localhost:4000으로 접속했을때 에러

1

153

2

webstorm 해결할 수 없는 변수 문제

0

150

2

혹시 몽고DB 쓸거면 MySQL 강의 스킵해도 되나요?

0

143

2

LightSail 실행 중 오류 질문드립니다!

0

196

2

RedisStore 사용법 질문

0

127

2

윈도우 파일탐색기 주소창에서 cmd를 입력할 경우 해당 경로로 바로 cmd를 열 수 있습니다.

2

181

2