React 컴포넌트 테스트

React 컴포넌트 테스트

CRA 테스트 샘플

CRA 기본 템플릿을 통해 생성된 프로젝트 안에는 기본 제공되는 App 테스트 파일이 포함되어 있습니다.

// React 테스팅 라이브러리에서 render, screen 모듈 추출
import { render, screen } from '@testing-library/react'

// 테스팅 할 컴포넌트 로드
import App from './App';

// 테스트 케이스
test(
  'renders learn react link' /* React 학습 링크를 렌더링합니다. */, 
  () => {
    // App 컴포넌트를 렌더링
    render(<App />)
    // 'learn react' 문자 값이 매칭되는 요소를 찾아 linkElement에 할당합니다.
    const linkElement = screen.getByText(/learn react/i)
    // jest-dom의 어설션(assertions)을 사용해 linkElement가 
    // 문서 안에 포함되어 있는지 확인합니다.
    expect(linkElement).toBeInTheDocument()
  }
)

컴포넌트 프레임 생성

만들고자 하는 컴포넌트 프레임(틀, frame) 코드를 작성합니다.

테스트 케이스 작성

만들고자 하는 컴포넌트의 테스트 파일을 먼저 만든 후, 컴포넌트가 갖춰야 할 테스트 코드를 작성합니다.

@types/testing-library__jest-dom 타입 정의를 설치하면 jest-dom 커스텀 매처 사용이 손 쉬워집니다.

테스트 수행

테스트 케이스 작성 후에는 테스트 명령을 실행합니다.

테스트 결과 작성한 모든 케이스가 실패(FAIL) 합니다. 아직 컴포넌트 로직을 작성하기 전이기 때문이죠.

컴포넌트 로직 작성

각 테스트 케이스 요구사항이 통과(PASS) 될 수 있도록 컴포넌트 코드를 작성합니다.

파일을 저장하면 테스트 결과가 출력됩니다. 모두 통과(PASS) 하여 요구사항을 충족했고 컴포넌트가 견고해졌습니다.

스크린 디버깅

screen 객체의 debug() 메서드를 사용하면 렌더링 된 컴포넌트 코드를 Console에 출력합니다.

테스트 케이스는 모두 통과(PASS) 되었지만, 스크린 디버깅 출력 결과를 살펴보면 class 속성 이름에 문제가 있는 것을 확인할 수 있습니다. 모든 테스트 케이스를 통과했다고 해서 컴포넌트가 완전한 것이 아님을 깨달을 수 있습니다.

props를 통해 전달 된 className 속성이 없을 경우, 조건 처리해 문제를 해결할 수 있도록 nullish 연산자를 활용해 코드를 다음과 같이 수정합니다.

파일을 수정 후 저장하면 스크린 디버깅 결과가 class 이름이 정상적으로 렌더링 된 코드를 출력합니다.

Last updated

Was this helpful?