🧪 userEvent
userEvent는 Testing Library 생태계에서 제공하는 유틸로, 실제 사용자의 인터렉션을 시뮬레이션하는 테스트 도구입니다.
👉 기존 fireEvent보다 더 현실적인 이벤트 흐름을 만들어줌
1️⃣ fireEvent vs userEvent
🔹 fireEvent
fireEvent.click(button);
- 단일 이벤트만 실행(
click) - 동시(sync) 처리
- 빠르지만 현실과 차이 있음
🔹 userEvent
const user = userEvent.setup();
await user.click(button);
실제 동작:
pointer → focus → mouseDown → mouseUp → click
👉 브라우저에서 발생하는 이벤트 흐름 전체를 재현
🔥 핵심 차이
| 항목 | fireEvent | userEvent |
|---|---|---|
| 관점 | 이벤트 발생 | 사용자 행동 |
| 이벤트 흐름 | ❌ 없음 | ✅ 있음 |
| 실행 | sync | async |
| 현실성 | 낮음 | 높음 |
2️⃣ 주요 사용 예시
🔹 클릭
await user.click(button);
🔹 입력
await user.type(input, "hello")
- 한 글자씩 입력됨 (실제 타이핑처럼)
🔹 키보드
await user.keyboard("{Enter}")
🔹 초기화
await user.clear(input)
3️⃣ 중요한 특징
🔹 async 기반
await user.click(...);
- 내부적으로 여러 이벤트가 순차 실행되기 때문에 비동기
🔹 브라우저 제약 반영
await user.click(disabledButton) // ❌ 동작 안 함
- 실제 사용자 환경과 동일하게 동작
🔹 테스트 신뢰도 향상
- 실제 사용 흐름 기반 테스트
- UI 버그를 더 잘 잡아냄
✍️ 한 줄 정리
userEvent는 단순 이벤트 실행이 아니라 사용자의 실제 행동 흐름을 재현하는 테스트 도구입니다.