강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

kangwoo_eum님의 프로필 이미지
kangwoo_eum

작성한 질문수

실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트

3.3. 리액트 훅 테스트(feat. act 함수)

toggleIsModalOpened 테스트 할때 궁금한 점이 있습니다.

해결된 질문

작성

·

20

0

제 생각에는 단순히 true가 됨을 테스트 할 것이 아닌 false => true => false와 같은 테스트 단계가 필요하다는 생각이 드는데 이런 연속적인 테스트는 어떤 식으로 구성하는 것이 좋은가요?

답변 2

0

코드 조커, 오프님의 프로필 이미지
코드 조커, 오프
지식공유자

안녕하세요! 답변이 조금 늦었네요.

말씀하신 것처럼 false → true → false 전체 흐름을 검증하는 것도 유효한 접근입니다.

다만 초기값 검증은 상단 테스트에서 이미 했고, 나머지 테스트들은 각각 toggle, setTrue, setFalse가 상태를 올바르게 변경하는지만 확인하는 걸로 처리했습니다.

말씀해주신 접근 물론 타당합니다. 지금처럼 단순한 경우엔 현재 구성으로 충분하지만, 상태 전이가 복잡해지면 시나리오 기반(말씀해주신!) 테스트가 더 유용할 수 있습니다.

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. 강우은님. 단순히 상태를 true로 변화시키는 것이 아닌, 상태가 여러 번 토글되는 시나리오를 테스트하고자 하는 경우, 연속적인 상태 변화를 검증할 필요가 있습니다.

toggleIsModalOpened와 같은 상태 토글 기능을 정확하게 테스트하기 위해서는 여러 번의 연속된 상태 변화를 확인해야 합니다. 아래는 그러한 테스트를 구성하는 방법에 대한 간단한 설명입니다:

  1. 초기 상태 확인: 컴포넌트를 렌더링한 후 초기 상태를 검사합니다.
  2. 첫 번째 토글: toggleIsModalOpened를 호출하여 상태를 변경하고 상태가 제대로 변경되었는지 확인합니다.
  3. 두 번째 토글: 같은 메서드를 다시 호출하여 상태가 반대로 다시 변경되는지 검사합니다.

아래 예제를 참고하시면 도움이 될 것 같습니다:

it('toggleIsModalOpened가 상태를 반복적으로 변경한다.', () => {
  const { result } = renderHook(() => useYourHook()); // useYourHook는 예시 훅입니다.
  
  // 초기 상태는 false인지 검사
  expect(result.current.isModalOpened).toBe(false);
  
  // 첫 번째 토글 후 상태는 true여야 함
  act(() => {
    result.current.toggleIsModalOpened();
  });
  expect(result.current.isModalOpened).toBe(true);
  
  // 두 번째 토글 후 상태는 다시 false여야 함
  act(() => {
    result.current.toggleIsModalOpened();
  });
  expect(result.current.isModalOpened).toBe(false);
});

위 설명과 같이 단계별로 상태 변화를 검증하면, 초기 상태에 대한 기대치뿐만 아니라 상태 전환이 의도한 대로 이루어지고 있는지를 복합적으로 확인할 수 있습니다.

관련된 답변은 useDarkMode에서 state 변화 검증하는 법에서 다루는데, 여기에서는 테스트의 신뢰도를 높이기 위해 행동 패턴을 어떻게 설정할 것인지에 대해 더 나은 이해를 돕고자 합니다.

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

kangwoo_eum님의 프로필 이미지
kangwoo_eum

작성한 질문수

질문하기