[4팀 오하늘] Chapter 3-2. 프론트엔드 테스트 코드#44
Open
eveneul wants to merge 17 commits intohanghae-plus:mainfrom
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
8주차 과제 체크포인트
기본 과제
필수
선택
심화 과제
각 팀원들의 테스트 전략은?
저라는 팀장의
권력욕주도 하에 4, 7 페어팀의 피그잼을 만들어 그 안에서 팀원들끼리 유닛 테스트, 통합 테스트, e2e 테스트 관련 개인의 생각과 선호도 조사(?)를 진행했다.테오하늘의 멘토링
7팀 정건휘:
4팀 김수민:
여기에서 궁금한 점이 생겼다. UX가 유독 중요한 프로젝트가 있을까? 그렇게 치면 모든 서비스에 UX가 중요할 텐데? e2e까지 넘어가야 할 UX 테스트가 있을까? 라고 생각이 들었다.
7팀 학습메이트 황태영: 예를 들어 모달창 같은 경우 딤 영역을 클릭했을 때 닫히지 않으면 당황스러운데, 그런 것들을 말하는 것이 아닐까?
4팀 김수민: 롤백 하지 못하는 프로젝트들에 대해서는 UX가 많이 중요하다고 생각이 됨. B2C 서비스는 그렇다 쳐도, B2B는 고객들이 사용료를 내고 우리의 서비스를 사용하는 것이기에 쉽게 롤백을 하지 못하니, 그럴 경우에는 UX가 많이 중요하다고 생각하고, 그럴 때는 통합 테스트나 e2e 테스트가 필요할 것 같다.
4팀 김지혜:
7팀 학습메이트 황태영:
필수 대상: 날짜/요금 계산, 정책 판별 등 작은 단위지만 오류 발생 시 치명적인 로직.
선택 대상: 중요도가 낮은 로직은 필요 시 선택적으로 적용. → “절대 깨지면 안 되는 핵심 로직”에 집중하는 전략.
대상: 여러 로직이 결합된 Hook 중심.
특징: 유저 동작 기반 테스트도 가능하지만, jsdom 환경 특성상 한계가 있어 효율이 낮다고 판단.
결론: 할 수는 있지만, 실질적으로는 E2E가 더 낫다고 생각.
대상: 실제 유저 동작 전체 시나리오(검색→선택→결제 등).
장점: 크로미움 기반 브라우저 환경으로 실제 사용자 경험과 가장 유사.
필요성: 가능하다면 반드시 하는 것이 가장 바람직하다고 평가.
비즈니스 로직처럼 중요한 부분부터 적용.
적용 순서: Unit → E2E → Integration (중요 로직은 Unit으로, 실제 사용 시나리오는 E2E로, 나머지 결합은 Integration으로).
4팀 오하늘:
7팀 양창훈:
4팀 이유진:
7팀 강병준:
유닛 테스트: 최소 단위의 모듈(함수, 공통 컴포넌트 등)을 검증하기 위한 테스트로서 개별 모듈이 정상적으로 동작하는지를 테스트하기 위한 것
“모듈을 신뢰할 수 있는가?”
통합 테스트: 여러 개의 모듈(컴포넌트, 서비스, 훅 등)이 서로 상호작용하는 과정을 검증하기 위한 테스트. 단일 함수가 올바르게 동작하는지 보는 게 아니라, 이벤트 → 여러 모듈 호출 → 결과라는 흐름이 끊김 없이 잘 이어지는지를 확인하는 것
“모듈들이 서로 잘 맞물리는가?”
E2E 테스트: 사용자 관점에서 서비스의 전체 흐름(워크플로우)을 끝까지 검증하는 테스트
“사용자가 실제로 이 제품을 써서 원하는 가치를 얻을 수 있는가?”
개인 생각: 단위 테스트도 함수의 안정성이나 품질을 보장하기 위한 하나의 수단으로서 굉장히 중요한 건 사실이지만 순수 함수로 구성된다면 부작용이 발생하는 상황이 적을텐데이번 과제에서 필요할까? 통합 테스트에 조금 더 집중하고 비즈니스적 가치를 전달할 수 있는 즉 메인 기능(12개)에 대해서는 E2E를 작성해보면 좋지 않을까?
4팀 김소희:
유닛 테스트: 최소 단위의 모듈을 검증하기 위한 테스트.
통합 테스트: 여러 모듈이 상호작용 하는 과정을 검증하기 위한 테스트.
e2e 테스트: 사용자 관점에서 서비스 전체 흐름을 검증하는 테스트.
(사실 소희 님은 병준 님이 쓴 거 요약했다.)
개인 생각: 나에게 테스트 코드란 쿠션이다... 넘어져도 다치지 않게 해 주는... ^^ 폭신폭신한 친구랄까.
합의된 테스트 전략과 그 이유는 무엇인가요?
테스트 코드 챕터 첫 번째 주차일 때, 테오 멘토링에서 테스트 코드를 어디에서부터 어디까지 감안을 해야 할지 모르겠다는 질문을 남긴 적이 있다. 테오는 Given → When → Then 패턴에 대해 알려 줬고, 그 패턴을 이번 과제에 도입하자고
또 팀장 권한으로주장했다. 고맙스럽게도 팀원들이 내 의견에 동의해 주었고, 동일한 피그잼에 그 패턴으로 기본 과제 요구사항들을 정리했다.(같이 도와준 팀원들 고마우이..)
과제 관련 노션 안에 있는 요구 사항들을 Given → When → Then 패턴으로 정리하자 테스트 코드에 대한 description을 쓰기도 쉬웠고, 특히 건휘 님이 말씀하신 것처럼 결국 테스트 코드는 Then에 적은 것들을 코드로 작성하면 되니 테스트 코드 작성이 (다른 분들은 어떨지 모르겠지만, 우선 나는) 수월했다.
추가로 작성된 테스트 코드는 어떤 것들이 있나요?
repetition.integration.spec
팀원들과 같이 정리한 내용을 토대로 작성한 테스트 코드다.
expandRecurringEvent함수로 반복 유형에 따른 일정 생성 테스트와 윤년 2월 29일에 일정 생성 시 2025-03-01에 일정이 생기지 않고 다음의 윤년에 일정이 생기는지 등을 판별하는 테스트 코드를 작성했다.과제 셀프회고
기술적 성장
테오가 알려 준 Given → When → Then 패턴을 회사 실무에서 적용해 보려고 했는데, 매! 일! 매! 일! 바뀌는 요건들과 당최 알 수 없는 요구사항들을 정리하기 쉽지 않아서 마음속으로 묻어두어야 하나 했지만.. 이번 과제로 인해 처음으로 패턴을 도입하게 되어 기분이 좋았다. 생각보다 많이 노가다 같지만, 기획서가 무엇을 요구하고 어떻게 해결해 나가야 하는지에 대한 힌트 같은 패턴이라고 생각되어 정말 많이 좋았다.
팀을 사랑하는 마음도.. 다들 고생했어양..코드 품질
말로만 듣던 TDD에 대해 조금은? 깊게 고찰해 볼 수 있는 시간이었다. 특히 과제를 진행하면서 우리 팀에서는 소희 님, 병준 님이 제일 먼저 과제를 완수해서 커밋 내역을 훑어 봤는데, 나와 많이 다르게 구현을 해 놓았다. 나는 mockEvent를 테스트 하나하나에 다 작성해 놓았는데, 사실 그럴 필요가 없었던 것 같기도 하고.. 사실 코드 한 줄 한 줄이 다 리팩토링 대상 같다.
학습 효과 분석
가장 큰 배움은 E2E 테스트 코드의 작성이다. Cypress를 처음 접해 봤는데, 병준 님이 말씀하신 것처럼 Cypress에서 사용하는 문법들이 익숙하지 않아서 초반에는 애를 많이 먹었다.
사실 결론적으로 말하자면, Cypress로 작성한 e2e 테스트 코드들을 다 지웠다. 시간이 부족하기도 했고, 내 마음대로 진행이 안 되어서... 인데, 로컬 서버에서는 너무나도 잘 작동하는 것이 Cypress에서는 되지 않았다. 아직 이 부분에 대해서는 배움이 필요하다.
과제 피드백
그래도 깔짝거리면서 작성한 e2e 테스트 코드에서 DOM을 추적할 때 dataset으로
data-test...를 기입했다. 그런데 이게 과연 옳은 것인지 모르겠다. 어차피 다 지워야 되는 데이터셋 아닌가.. 그렇다면 className이나 id로 찾을 텐데, 요즈음에는 tailwind CSS를 자주 사용하니까..... 라고 생각했다.리뷰 받고 싶은 내용
사실 TDD의 강점을 잘 모르겠습니다. 제가 TDD를 너무 많이 기대했던 걸까요. ㅎㅎ 코치님이 생각하시는 TDD의 강점? 그리고 취향은 어떤지 궁금합니다.