?
사용자
Jest/RTL을 활용한 React 컴포넌트 테스트 코드 작성 가이드
React 컴포넌트의 동작을 Jest와 React Testing Library(RTL)를 사용하여 효과적으로 테스트하는 방법을 안내합니다. 복잡한 UI 로직이나 사용자 인터랙션 테스트 시 유용합니다.
#jest#react testing library#rtl#react#테스트 코드
recipe.sh
Jest와 React Testing Library(RTL)를 사용하여 React 컴포넌트의 테스트 코드를 작성하는 방법을 안내합니다. 이 레시피는 재사용 가능한 프롬프트 템플릿으로, 실제 프로젝트에서 바로 적용할 수 있도록 구성되어 있습니다.
## 목표
- Jest와 RTL을 활용하여 React 컴포넌트의 기능 및 사용자 인터랙션을 검증하는 테스트 코드 작성
- 테스트 커버리지 향상 및 코드 품질 개선
## 사용 방법
아래 프롬프트 템플릿에서 `{{컴포넌트 이름}}`, `{{테스트할 기능}}`, `{{컴포넌트 코드}}`, `{{필요한 Mock 데이터 또는 함수}}` 부분을 실제 상황에 맞게 채워 넣어 AI에게 요청하세요.
```prompt
다음은 "{{컴포넌트 이름}}" React 컴포넌트입니다:
```jsx
{{컴포넌트 코드}}
```
이 컴포넌트에 대해 Jest와 React Testing Library(RTL)를 사용하여 "{{테스트할 기능}}"을(를) 검증하는 테스트 코드를 작성해 주세요.
테스트 시뮬레이션:
- 사용자는 {{사용자 행동}}을(를) 수행합니다.
- 예상 결과는 {{기대되는 결과}}입니다.
필요하다면, 다음과 같은 Mock 데이터를 사용하거나 함수를 구현해 주세요:
```javascript
{{필요한 Mock 데이터 또는 함수}}
```
테스트 코드는 다음을 포함해야 합니다:
1. 컴포넌트 렌더링 및 기본 상태 확인
2. `{{테스트할 기능}}`과 관련된 사용자 상호작용 (예: 버튼 클릭, 입력 필드 변경)
3. 상호작용 후 DOM 상태 또는 결과 확인
4. 적절한 `screen` 쿼리를 사용하고, 필요시 `fireEvent` 또는 `userEvent`를 활용
5. 비동기 작업이 있다면 `waitFor` 또는 `findBy` 관련 헬퍼 함수 사용
다음은 일반적인 `{{컴포넌트 이름}}` 컴포넌트의 구조 예시이며, 실제 코드는 제공된 `{{컴포넌트 코드}}`를 따릅니다.
```jsx
// src/components/{{컴포넌트 이름}}.jsx
import React, {{ useState }} from 'react';
function {{컴포넌트 이름}}(props) {
// ... 컴포넌트 로직 ...
return (
<div>
{/* ... JSX ... */}
</div>
);
}
export default {{컴포넌트 이름}};
```
테스트 파일은 `{{컴포넌트 이름}}.test.js` 또는 `{{컴포넌트 이름}}.test.jsx` 형식으로 작성해 주세요.
**예시 입력 (참고용):**
* `{{컴포넌트 이름}}`: Counter
* `{{테스트할 기능}}`: 카운터 증가 및 감소 버튼 동작
* `{{컴포넌트 코드}}`:
```jsx
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<h1>Count: {count}</h1>
<button onClick={() => setCount(count + 1)}>Increment</button>
<button onClick={() => setCount(count - 1)}>Decrement</button>
</div>
);
}
export default Counter;
```
* `{{사용자 행동}}`: 'Increment' 버튼을 두 번 클릭
* `{{기대되는 결과}}`: 화면의 'Count: 2' 텍스트가 표시되어야 합니다.
* `{{필요한 Mock 데이터 또는 함수}}`: (이 예시에서는 특별히 필요 없음)
```
## 추가 팁
- `user-event` 라이브러리를 사용하면 실제 사용자 행동과 더 유사한 시뮬레이션이 가능합니다.
- 복잡한 상태 관리나 API 호출이 있다면, 해당 부분은 Mocking하여 테스트의 독립성을 확보하세요.
- 테스트 시, 접근성을 고려하여 `getByRole`, `getByLabelText` 등의 쿼리 사용을 우선적으로 고려하는 것이 좋습니다.0
스크랩
4
좋아요
0
댓글