act가 필요한 경우
1. 컴포넌트 내부에 비동기 작업이 있을 때
- useEffect 내 비동기 작업
- API 호출 (axios, fetch 등)
// 예시 await act(async () => { render(<ComponentWithAPI />); });
2. 상태 업데이트가 있는 경우
- useState 사용
- setState 호출
act(() => { fireEvent.click(button); // 상태 변경 발생 });
3. 타이머 사용시
- setTimeout, setInterval
act(() => { jest.runAllTimers(); // 타이머 실행 });
act가 필요없는 경우
1. 단순 렌더링 체크
render(<StaticComponent />);
expect(screen.getByText("hello")).toBeInTheDocument();
2. 이미 act를 포함하는 메서드 사용시
- fireEvent (단순 이벤트)
- waitFor
- userEvent
fireEvent.click(button); // 내부적으로 act 포함 await waitFor(() => {}); // 내부적으로 act 포함
3. 정적 값 확인
expect(element).toHaveStyle({ color: 'red' });
async/await와 함께 사용
필요한 경우
- 컴포넌트에 비동기 작업이 있을 때
await act(async () => { // 비동기 작업 포함된 렌더링 });
필요없는 경우
- 동기 작업만 있을 때
act(() => { // 동기 작업만 있는 경우 });
주의사항
- 중첩 사용 피하기
- 불필요한 곳에 사용하지 않기
- 테스트 가독성 유지하기
'TDD > JEST+React Test' 카테고리의 다른 글
JEST, React Testing Library 실제 해보기 (0) | 2025.04.17 |
---|---|
TDD(Test Driven Development)와 테스팅 도구 Jest, React Testing Library (0) | 2025.04.16 |