개발자
jest 를 사용해 Next 프레임워크에서 테스트 코드를 작성하였는데 테스크 코드에 대한 모듈을 어떤식으로 관리하는게 좋을까요? test 폴더에 모든 test 코드를 관리하자니, 모듈이 많아지게 되었을때 어떤 테스트 코드가 어떤 파일에 해당하는 테스크 코드인지 확인 하기 어렵고 각 모듈이 있는 경로에 test 코드를 각각 관리하자니 모듈을 새로 생성할때마다 똑같은 이름의 테스크 코드 모듈이 생성 되서 어떤 방법이 더 관리하기 편할지 의문입니다 어떤 모듈 관리가 더 효율적일까요? 개인적으로는 후자가 더 편할거같기는 한데 이것이 개인적인 선호도의 차이일까요??
답변 2
인기 답변
프로젝트에서 테스트 코드를 어디에 두어야 좋을지 궁금하시군요. 여러 프로젝트에서 다양한 방법으로 테스트 코드를 관리하면서 제가 느꼈던 장단점을 공유드리겠습니다. ``` src/ componnets/ Button.tsx Heading.tsx pages/ Login.tsx __test__/ componnets/ Button.test.tsx Heading.test.tsx pages/ Login.test.tsx ``` 우선 위과 같이 하나의 디렉토리에 모든 테스트 코드를 모아두는 방식은 예전에 프로젝트의 규모가 크지 않을 때 주로 사용되던 방식입니다. 프로덕션 코드로 부터 테스트 코드를 명확하게 분리할 수 있다는 장점이 있지만, 프로젝트의 규모가 커지고 `src` 디렉토리와 `__test__` 디렉토리 내에 폴더 구조가 깊어지고 복잡해짐에 따라서 테스트 코드를 찾는 게 점점 고통스러워진다는 단점이 있습니다. 하지만 요즘에는 Jest를 포함한 대부분의 테스트 러너(runner)가 Glob 패턴 매칭을 지원함에 따라서 프로덕션 코드와 테스트 코드를 굳이 꼭 같은 디렉토리에 둘 필요성이 적어졌어요. 빌드 도구도 좋아져서 테스트 코드가 같이 번들링(bundling)되거나 하는 문제도 거의 없고요. 그래서 저는 가급적 아래와 같이 테스트 코드와 테스트하려는 코드와 최대한 가까이 두시라고 추천드리고 싶습니다. ``` src/ componnets/ Button.tsx Button.test.tsx Heading.tsx Heading.test.tsx pages/ Login.tsx Login.test.tsx ``` 여기에는 여러가지 실용적인 이유가 있는데요. 첫째로, 컴포넌트 파일과 테스트 파일을 같은 디렉토리에 두면 전반적인 유지보수가 쉬워집니다. 왜냐하면 대게 컴포넌트를 수정할 때 테스트 파일도 함께 수정하게 되고 Storybook을 사용하게 되면 스토리 파일도 수정해야되고, 간혹 복잡한 컴포넌트의 경우 유틸리티 파일도 있을 수 있고 뿐만 아니라 index.tsx와 같은 파일도 함께 수정해야되는데 이 관련된 모든 파일이 한 곳에서 관리할 수 있으니까요. 특히 리펙토링이 매우 용이해집니다. 두 번째로 개발자 경험이 좋아지는 효과가 있습니다. 별도의 테스트 디렉토리를 사용할 때는 컴포넌트 파일과 테스트 파일이 너무 멀리 떨어져있어서 개발자들이 코드 탐색기에서 계속해서 위 아래로 스크롤링을 하느라 정신이 없습니다. 그런데 테스트 파일이 컴포넌트 파일 바로 옆으로 두면 그런 불편함이 자연스럽게 사라집니다. 뿐만 아니라 GitHub에서 코드 리뷰할 때도 컴포넌트 파일을 바로 전이나 다음에 테스트 파일이 나와서 코드 리뷰하는 사람도 편해집니다. 셋째로, 테스트 코드 내에 임포트(import) 구문이 깔끔해집니다. 별도의 테스트 디렉토리에 테스트 파일을 모아두었을 때는`../../../src/cmponents/XxxComponet`와 같은 복잡한 상대 경로 때문에 테스트 파일에서 컴포넌트 불러오는 코드가 매우 지저분해지고 정확히 어떤 디렉토리인지 한 눈에 파악하기가 어려워집니다. 하지만 테스트 파일을 컴포넌트 옆에 두면 `./`와 같은 간단한 상대 경로 때문에 테스트 코드가 깔끔해집니다. 마지막으로 코드 커버리지의 상승 효과가 기대할 수 있습니다. 테스트 파일을 컴포넌트랑 같은 디렉토리에 두면 테스트가 작성되지 않은 컴포넌트가 훨씬 눈에 잘 띄기 때문입니다. 아무래도 테스트가 없다는 것을 계속 상기시켜주기 때문에 팀 내 모범적인 개발자들이 자진해서 테스트를 작성할 확률이 높아지겠죠? 답변이 도움이 되었으면 좋겠습니다 :)
Code King Academy
작성자
Code Lika a KING / QUEEN • 2023년 10월 11일
정말 자세히 설명 해주셔서 이해가 너무 잘 되었습니다 도움 주셔서 감사합니다!! 마지막 이유인 코드 커버리지 상승 효과 공감합니다 ㅎㅎ 감사합니다!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2023년 10월 10일
테스트 코드의 구조는 개발 팀의 선호도와 프로젝트의 요구사항에 따라 크게 달라질 수 있습니다. 그러나, 일반적으로 테스트 코드를 관리하는 두 가지 주요 전략은 다음과 같습니다: 1. `Centralized` : 모든 테스트 파일을 하나의 중앙 디렉토리에 저장합니다. 이 접근 방식은 테스트 코드를 쉽게 찾을 수 있는 장점이 있지만, 프로젝트가 커질수록 관리하기 어려울 수 있습니다. 2. `Collocated`: 각 소스코드 파일 또는 모듈 바로 옆에 해당 테스트 파일을 위치시킵니다. 이 전략은 구조적인 명확성을 제공하며, 코드베이스가 확장됨에 따라 적절한 테스트 파일을 쉽게 찾을 수 있습니다. Jest는 기본적으로 두 가지 방식 모두 지원하므로 프로젝트의 필요성과 개발팀의 선택에 따라 자유롭게 선택할 수 있습니다. `Next.js` 프로젝트에서는 보통 'Collocated' 방식이 선호되고 많이 사용됩니다. 왜냐하면 이 방식은 각각의 컴포넌트나 페이지 별로 테스트 파일을 유지함으로써, 코드와 테스트 간의 관계를 명확하게 해주기 때문입니다. 하지만 중요한 것은 일관성입니다. 프로젝트 또는 팀 전체에서 일관된 방식을 선택하고 적용하는 것이 효율적인 코드 관리를 위해 중요합니다. 따라서 이 결정은 개인의 선호도에 의해 좌우되기 보다는 전체 팀원들이 공감하고 지킬 수 있는 방식을 선택하는 것이 좋습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!