HARD
7주차 과제 체크포인트
기본과제
- 총 11개의 파일, 115개의 단위 테스트를 무사히 작성하고 통과시킨다. -> 통합 테스트 제외 작성
질문
Q. handlersUtils에 남긴 질문에 답변해주세요.
병렬 테스트 문제 해결을 위해 각 테스트마다 독립된 핸들러를 생성합니다.
문제점:
- 기존 handlers.ts의 전역 events 배열은 모든 테스트에서 공유되는 문제가 있습니다.
- 병렬 실행 시 테스트 간섭으로 오류가 발생합니다.
해결 방안:
- 각 setup 함수 내부에서 독립된 testContext를 생성
- testContext가 테스트별로 격리된 데이터 환경 제공
- 클로저를 통해 각 핸들러가 고유한 testId를 참조
Q. 테스트를 독립적으로 구동시키기 위해 작성했던 설정들을 소개해주세요.
// 예시 : setupMockHandlerCreation
export const setupMockHandlerCreation = (initEvents: Event[] = []) => {
const testId = testContext.create(initEvents);
return [
http.get('/api/events', () => {
return HttpResponse.json({ events: testContext.getEvents(testId) });
}),
http.post('/api/events', async ({ request }) => {
const json = (await request.json()) as Omit<Event, 'id'>;
const event: Event = { ...json, id: randomUUID() };
testContext.addEvent(testId, event);
return HttpResponse.json(event, { status: 201 });
}),
];
};
각 handler에서 context에서 관리하는 Map을 통해 각 테스트간 실행을 격리시키도록 하였습니다.
심화 과제
- App 컴포넌트 적절한 단위의 컴포넌트, 훅, 유틸 함수로 분리했는가?
- 해당 모듈들에 대한 적절한 테스트를 5개 이상 작성했는가?
과제 셀프회고
- easy를 작성하는 동안은 즐거웠습니다.
- easy 내 테스트 코드에 사용되는 함수들이 테스트하기 좋은 코드다... 라는 생각을 하며 작성을 했습니다.
- msw는 너무 light하게 사용하고 있었나 라는 생각도 들었습니다.
- 테스트 환경에서 독립성을 지키는 것의 중요성을 알게되었습니다.
기술적 성장
- vitest(jest)내 함수들에서 사용하지 않았던 함수들을 사용할 수 있게 되었습니다.
- test 환경 내에 독립성에 대해서 고민하는 시각이 생겼습니다.
학습 효과 분석
-
msw 핸들러를 활용하는 부분을 아직 적용하지 못했습니다.
-
이 부분을 보완해서 추가로 medium의 통합 테스트 부분을 작성해보려고 합니다.
-
그래서 통합 테스트에 대한 개념을 배워가고 싶습니다.
-
단위 테스트와 hook 테스트에 대해 분리가 잘 되어있어 이 부분이 조금 더 보이게 되었습니다.
과제 피드백
- mui 관련 import 오류가 있어, 테스트 코드 작성에 대해 문제라고 생각했던 부분에서 시간이 소모된 것이 아쉬웠습니다.
- 심화과제를 진행하여 직접 테스트 코드 만들어서 작성해보는 연습이 되어야할 것 같습니다.
리뷰 받고 싶은 내용
과제 피드백
아숩게도 테스트가 완전히 통과하지는 못했네요ㅜ 일단 지금 작성되어 있는 테스트를 보면 작성하시는데 특별하게 엄청 잘못된 패턴은 없는 것 같고 시간이 부족하셨던 것 같네요. (중복된 세팅들은 setup, teardown 과정으로 분리하는 연습을 진행해보세요!) 여유가 있으실 때 꼭 채워주시고 관련해서 학습 진행해주시면 좋겠네요!
화이팅입니다~