Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

테스트 환경에서 하나의 컨테이너가 작동하도록 설정 #103

Merged
merged 4 commits into from
Nov 12, 2024

Conversation

koomchang
Copy link
Collaborator

@koomchang koomchang commented Nov 11, 2024

📄 Summary

테스트 환경에서 하나의 컨테이너가 작동하도록 설정

🙋🏻 More

  • jest 환경설정 분리 (package.json -> jest.config.ts)

  • 테스트 설정 파일들을 config 디렉토리로 변경

  • 하나의 컨테이너에서 모든 테스트들을 독립적으로 실행할 수 있도록 버그 수정

  • 작동과정

    1. yarn run test
    2. globalSetup에서 DB Container 생성 (전역객체로 관리, 추후 globalTeardown 에서 제거하기 위해)
    • 참고로 globalSetup, globalTeardown 에서 사용하는 global.전역객체globalSetup, globalTeardown 두 파일에서만 사용 가능합니다.

    A global setup module configured in a project (using multi-project runner) will be triggered only when you run at least one test from this project.
    Any global variables that are defined through globalSetup can only be read in globalTeardown. You cannot retrieve globals defined here in your test suites.
    While code transformation is applied to the linked setup-file, Jest will not transform any code in node_modules. This is due to the need to load the actual transformers (e.g. babel or typescript) to perform transformation.

    1. 테스트 실행, 이때 jest cli 인자에 --runInBand(alias. -i) 속성을 주어 테스트를 직렬적으로 실행할 수 있게 설정.
      - --runInBand 속성은 매우 좋은 성능에서는 속도가 조금 느려지는데, 우리 같이 Container를 사용하는 등의 열악한 환경에서는 속도가 더 빨라짐 (정확한 기준은 모르겠음 + gpt가 내 맥북 2019 i7 16gb 정도에서도 빨라질거라 함. ㅠㅠ)
    2. 테스트 종료 이후 globalTeardown 이 컨테이너를 종료 및 삭제 시켜줌. (중간에 테스트를 강제 종료하는 경우 container를 직접 삭제해야 함)
  • 기타

    1. 본인 환경에서 Docker 가 실행중이어야함.
    2. 실행 결과

      스크린샷 2024-11-12 01 14 02
  • 참고

🕰️ Actual Time of Completion

24

close #72

@koomchang koomchang added BE 백엔드 관련 이슈입니다 👀 테스트 테스트를 작성하거나 수정합니다 🚑 버그 예기치 않은 문제 또는 의도하지 않은 동작입니다 ⚙️ 리팩터링 코드 퀄리티를 높입니다 🛠️ 설정 설정을 변경합니다 labels Nov 11, 2024
@koomchang koomchang added this to the week3 milestone Nov 11, 2024
@koomchang koomchang self-assigned this Nov 11, 2024
Copy link
Collaborator

@Miensoap Miensoap left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다~

모든 테스트들을 독립적으로 실행할 수 있도록

에 대한 내용을 코드에서 찾지 못했어요.
이에 대해 더 설명해 주세요!

아까 얘기한대로 데이터베이스를 여러 개 생성하나요?

const container = global.reusedContainer;

if (container) {
await container.stop();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

q. 이거 안하면 컨테이너가 계속 돌아가나요?
라이브러리에서 자체적으로 자원 정리해주는 기능이 없나요?

Copy link
Collaborator Author

@koomchang koomchang Nov 12, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reuse() 메소드를 이용하게 되면 기존 컨테이너를 재사용한다고 명시해주게 되므로 컨테이너를 정리하지 않습니다!

@@ -68,7 +53,6 @@ describe('PlaceRepository', () => {
);
await placeRepository.save(places);

// when
const page = 1;
const pageSize = 10;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p3. 테스트랑 직접 관련있는건 아니지만,
테스트 코드를 보니, page, size 에 기본값을 설정하면 좋을 것 같다는 생각이 들어요.

테스트에서도 테스트하고자 하는 기능에 대한 내용만 담길 수 있을 것 같습니다!

어떻게 생각하시나요??

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

좋다고 생각합니다! 다만, 페이지네이션이 잘 되는지 확인하는 테스트조 하나 있어야 할 것 같아요

@koomchang
Copy link
Collaborator Author

koomchang commented Nov 12, 2024

수고하셨습니다~

모든 테스트들을 독립적으로 실행할 수 있도록

에 대한 내용을 코드에서 찾지 못했어요.

이에 대해 더 설명해 주세요!

아까 얘기한대로 데이터베이스를 여러 개 생성하나요?

runInBand 속성 (alias. -i) 를 이용하여 병렬 실행하기 때문에 테스트 파일 하나가 끝나고 다음 테스트가 진행되는 방식이라 독립적인 실행이 가능합니다!

Copy link
Collaborator

@hyohyo12 hyohyo12 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고했습니다!

@Miensoap
Copy link
Collaborator

runInBand 속성 (alias. -i) 를 이용하여 병렬 실행하기 때문에 테스트 파일 하나가 끝나고 다음 테스트가 진행되는 방식이라 독립적인 실행이 가능합니다!

그럼 병렬이 아니지 않나요?

@koomchang
Copy link
Collaborator Author

koomchang commented Nov 12, 2024

runInBand 속성 (alias. -i) 를 이용하여 병렬 실행하기 때문에 테스트 파일 하나가 끝나고 다음 테스트가 진행되는 방식이라 독립적인 실행이 가능합니다!

그럼 병렬이 아니지 않나요?

아 직렬로 실행합니다. 잘못 말했네요 ㅎㅎ 기본값이 병렬 실행이에요

@koomchang koomchang merged commit eaee784 into develop Nov 12, 2024
2 checks passed
@koomchang koomchang deleted the feature/#72 branch November 12, 2024 06:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드 관련 이슈입니다 ⚙️ 리팩터링 코드 퀄리티를 높입니다 👀 테스트 테스트를 작성하거나 수정합니다 🚑 버그 예기치 않은 문제 또는 의도하지 않은 동작입니다 🛠️ 설정 설정을 변경합니다
Projects
None yet
3 participants