Communitygithub.com

itechmeat/react-testing-library

사용자 중심의 React 컴포넌트 테스트: 쿼리, 사용자 이벤트 시뮬레이션, 비동기 유틸리티 및 접근성 우선 API를 제공합니다. React 컴포넌트 테스트 작성, role/label/text로 요소 선택, 사용자 이벤트 시뮬레이션 또는 비동기 UI 동작 테스트에 사용하세요.

react-testing-library란 무엇인가요?

이 스킬은 React Testing Library(@testing-library/react)를 활용하여 사용자 중심의 React 컴포넌트 테스트를 작성할 수 있도록 지원합니다. 주로 getByRole, getByLabelText, getByText와 같은 쿼리를 사용해 DOM 요소를 접근성 속성 기반으로 선택하며, fireEvent나 user-event 라이브러리를 통해 실제 사용자 동작을 시뮬레이션합니다. 또한 waitFor, findBy* 등의 비동기 유틸리티를 제공하여 상태 변경이나 데이터 로딩 이후의 UI를 안정적으로 테스트할 수 있습니다. 이 스킬은 Claude Code, Cursor, Codex 등 다양한 AI 에이전트 환경에서 사용 가능하며, 가상 DOM에서 컴포넌트를 렌더링하는 render 함수를 통해 구현 세부사항이 아닌 사용자 관점의 테스트를 강조합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/itechmeat/llm-code/tree/main/skills/react-testing-library

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

react-testing-library은(는) 무엇을 하나요?

React Testing Library: 사용자 중심의 컴포넌트 테스트 - 쿼리, 사용자 이벤트 시뮬레이션, 비동기 유틸리티 및 접근성 우선 API를 제공합니다. React 컴포넌트 테스트 작성, role/label/text로 요소 선택, 사용자 이벤트 시뮬레이션 또는 비동기 UI 동작 테스트에 사용하세요. 키워드: React Testing Library, @testing-library/react, user-event, 쿼리, render.

주요 기능

  • 쿼리 (Queries): getByRole, getByLabelText, getByText, getByTestId 등 접근성 기반 쿼리 사용
  • 사용자 이벤트: fireEvent 및 @testing-library/user-event를 통한 실제 사용자 동작 시뮬레이션
  • 비동기 유틸리티: waitFor, findBy*, waitForElementToBeRemoved로 비동기 UI 처리
  • 렌더링: render 함수로 가상 DOM에 컴포넌트 렌더링
  • 접근성 우선: role, label, text 등 실제 사용자가 인식하는 방식으로 요소 선택

사용 예시

import { render, screen, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import MyComponent from './MyComponent';

test('버튼 클릭 시 메시지 표시', async () => {
  render(<MyComponent />);
  const button = screen.getByRole('button', { name: /클릭/i });
  await userEvent.click(button);
  await waitFor(() => {
    expect(screen.getByText(/성공/i)).toBeInTheDocument();
  });
});

설치

npm install --save-dev @testing-library/react @testing-library/jest-dom @testing-library/user-event

주요 API

함수설명
render(ui, options)컴포넌트를 가상 DOM에 렌더링
screen.getByRole(role, options)ARIA role로 요소 검색
screen.getByLabelText(text)label 텍스트로 요소 검색
screen.getByText(text)텍스트 내용으로 요소 검색
screen.getByTestId(id)data-testid 속성으로 요소 검색
fireEvent(node, event)DOM 이벤트 발생
userEvent.setup()사용자 이벤트 시뮬레이터 초기화
waitFor(callback, options)조건이 충족될 때까지 대기
findBy* 쿼리프로미스 기반 비동기 쿼리

모범 사례

  1. 접근성 우선: getByRole, getByLabelText 등 접근성 쿼리를 우선 사용하세요.
  2. 구현 세부사항 회피: container.querySelector나 getByTestId는 최후의 수단으로 사용하세요.
  3. 사용자 관점: 테스트는 실제 사용자 상호작용을 시뮬레이션해야 합니다.
  4. 비동기 처리: 상태 변경 후 UI 업데이트는 waitFor 또는 findBy*를 사용하세요.

관련 스킬