프론트엔드 정복하기
RTL Varient, Queries 종류 + jest Matcher 본문
테스팅 라이브러리/React-Testing-Library
RTL Varient, Queries 종류 + jest Matcher
GROWNFRESH 2021. 2. 23. 21:42render 함수를 실행하고 나면 그 결과물 안에는 다양한 쿼리 함수들이 있다.
이 쿼리 함수들은 Variant와 Queries의 조합으로 이루어져있다.
RTL 공식사이트에서는 다음 우선순위에 따라 사용할 것을 권장한다.
- getByLabelText
- getByPlaceholderText
- getByText
- getByDisplayValue
- getByAltText
- getByTitle
- getByRole
- getByTestId
( ** 아래 Queries 리스트 순서대로임)
Variant
Variant명 | 기능 |
getBy | getBy* 로 시작하는 쿼리는 조건에 일치하는 DOM 엘리먼트 하나를 선택합니다. 만약에 없으면 에러가 발생합니다. |
getAllBy | getAllBy* 로 시작하는 쿼리는 조건에 일치하는 DOM 엘리먼트 여러개를 선택합니다. 만약에 하나도 없으면 에러가 발생합니다. |
queryBy | queryBy* 로 시작하는 쿼리는 조건에 일치하는 DOM 엘리먼트 하나를 선택합니다. 만약에 존재하지 않아도 에러가 발생하지 않습니다. |
queryAllBy | queryAllBy* 로 시작하는 쿼리는 조건에 일치하는 DOM 엘리먼트 여러개를 선택합니다. 만약에 존재하지 않아도 에러가 발생하지 않습니다. |
findBy | findBy* 로 시작하는 쿼리는 조건에 일치하는 DOM 엘리먼트 하나가 나타날 때 까지 기다렸다가 해당 DOM 을 선택하는 Promise 를 반환합니다. 기본 timeout 인 4500ms 이후에도 나타나지 않으면 에러가 발생합니다. |
findAllBy | findBy* 로 시작하는 쿼리는 조건에 일치하는 DOM 엘리먼트 여러개가 나타날 때 까지 기다렸다가 해당 DOM 을 선택하는 Promise 를 반환합니다. 기본 timeout 인 4500ms 이후에도 나타나지 않으면 에러가 발생합니다. |
Queries
Queries명 | 기능 | 예시 |
ByLabelText | <label이 있는 input>의 label 내용으로input 을 선택 | <label for="username-input">아이디</label> <input id="username-input"/> const inputNode = getByLabelText('아이디'); |
ByPlaceholderText | placeholder 값으로 input 및 textarea 를 선택 | <input placeholder="아이디"/> const inputNode = getByPlaceholderText("아이디"); |
ByText | 엘리먼트가 가지고 있는 text 값으로 DOM을 선택 | <div>Hello World!</div> const div = getByText("Hello World!") 또는 (정규식) const div = getByText(/^Hello/) |
ByDisplayValue | input, textarea, select가 지니고 있는 현재 값을 가지고 엘리먼트를 선택 | <input value="text">; const inputNode = getByDisplayValue('text') |
ByAltText | alt속성을 가지고 있는 엘리먼트(주로 img)를 선택 | <img src="/abc.png" alt="awesome image"/>; const imgNode = getByAltText('awesome image') |
ByTitle | title 속성을 가지고 있는 DOM 혹은 title 엘리먼트를 지니고 있는 SVG를 선택 |
<span title="React">리액트</span> <svg><title>Delete</title></svg> const spanNode = getByTitle('React') const svgNode = getByTitle('Delete') |
ByRole | 특정 role 값을 지니고 있는 엘리먼트 선택 | <span role="button"></span> const spanNode = getByRole('button') |
ByTestId | 다른 방법으로 선택하지 못할 때 사용.. --->> testid를 달아서 선택함. |
<div data-testid="commondiv"></div> const divNode = getByTestId('commondiv') |
참고사이트
velog.io/@velopert/react-testing-library
jest 메소드 - 공식홈페이지
tobeNull() 같은 메소드를 matcher 라고 한다.
자주쓰는 매쳐 정리
'테스팅 라이브러리 > React-Testing-Library' 카테고리의 다른 글
에러 | ReferenceError: regeneratorRuntime is not defined (0) | 2021.03.13 |
---|---|
r-t-l는 describe, it을 쓰는가? test를 쓰는가? (0) | 2021.03.13 |
TDD의 장점/핵심 과정/RTL의 장점 (0) | 2021.02.23 |
React Testing Library 설치 및 설정 (0) | 2021.01.24 |
React-Testing-Library에서 목업 활용법(useSelector 등을 Mock) (0) | 2021.01.10 |