render
const { getByText, getByRole } = render(<Component />);
- @testing-library/react 의 메소드
- 컴포넌트를 가상 DOM에 렌더링
- 여러 쿼리 함수들을 반환한다.
getByText
const element = getByText("To do");
- 텍스트 내용으로 DOM 요소를 찾는 쿼리 메소드
- 일치하는 요소가 없으면 에러 발생
- 정확히 일치하는 텍스트를 찾음
getByRole
const button = getByRole("tab", { name: "To do" });
- Aria role로 DOM 요소를 찾는 쿼리 메소드
- 접근성 테스트에 유용
name 옵션으로 추가 필터링 가능
fireEvent
fireEvent.click(element);
fireEvent.mouseDown(element);
fireEvent.mouseUp(element);
- DOM 이벤트를 시뮬레이션하는 메소드
- 다양한 이벤트 타입 지원 (click, change, keyPress 등)
userEvent
fireEvent.click(button);
await userEvent.click(button);
await user.click(element);
await user.dblClick(element);
await user.tripleClick(element);
await user.type(input, 'Hello');
await user.keyboard('{Enter}');
await user.tab();
await user.hover(element);
await user.unhover(element);
await user.copy(element);
await user.paste('텍스트');
await user.drag(source);
await user.drop(target);
- 더 현실적인 사용자 동작 테스트 가능
- 이벤트 순서가 보장됨
- 접근성 테스트가 더 명확함
- 비동기 동작 처리가 더 쉬움
toBeInTheDocument
expect(element).toBeInTheDocument();
- Jest matcher
- 요소가 DOM에 존재하는지 확인
@testing-library/jest-dom 에서 제공
toHaveBeenCalledWith
expect(mockFunction).toHaveBeenCalledWith("expected arg");
- Jest matcher
- mock 함수가 특정 인자와 함께 호출되었는지 확인
- mock 함수의 호출 검증에 사용
mockClear
mockFunction.mockClear();
- Jest mock 함수의 호출 기록을 초기화
- 각 테스트 전에 mock 상태를 리셋
toBeDefined
test('toBeDefined 예시', () => {
const foo = {
bar: 'hello',
baz: undefined,
func: () => {}
};
expect(foo.bar).toBeDefined();
expect(foo.func).toBeDefined();
expect(foo.baz).toBeDefined();
expect(foo.xyz).toBeDefined();
});