getAllBy-
이전까지 getBy-
를 이용해서 한 개의 요소를 찾는 방법을 배웠다. 여러 개의 요소가 있는 상황을 테스트하는 상황도 있을 것이다. 이때 사용할 수 있는 방법으로 getAllBy-
가 있다.
getAllBy-는 getBy-와 비슷하지만, 여러 개의 요소를 찾을 때 사용한다.
이전 글들은 1개의 요소를 찾을 때 사용했지만, 이번 글에서는 여러 개의 요소를 찾을 때 사용하는 방법을 알아보자.
사용법
const elements = screen.getAllByRole("textbox")
expect(elements).toHaveLength(2) // textBox가 2개 있을 때
주의사항
- getAllBy-는 요소가 없을 때 에러를 발생시킨다.
- getAllBy-는 요소가 1개일 때도 에러를 발생시킨다.
- getAllBy-는 요소가 2개 이상일 때 사용한다.
- getAllBy-는 배열을 반환한다.
getBy-와 getAllBy-의 차이점
메서드 | 반환 값 | 요소가 없을 때 | 요소가 여러 개일 때 | 사용 시점 |
---|---|---|---|---|
getBy |
하나의 요소 | 에러 발생 | 첫 번째 요소만 반환 | 요소가 하나일 것으로 예상될 때 |
getAllBy |
요소들의 배열 | 에러 발생 | 모든 요소를 배열로 반환 | 요소가 여러 개일 것으로 예상될 때 |
textMatch
textMatch는 React Testing Library에서 사용하는 옵션 중 하나로, 요소를 찾을 때 텍스트 일치 조건을 지정하는 방법이다.
주로 getByRole
, getByText
, findByText
등의 메서드와 함께 사용하며, 특정 텍스트와의 일치 기준을 설정할 수 있다.
사용법
단순 텍스트 일치
가장 기본적인 방식으로, 텍스트가 완전히 일치하는 경우에만 요소를 찾는다.
screen.getByText("Hello, World!", { exact: true })
exact 옵션은 텍스트가 완전히 일치하는지 여부를 설정하는 옵션이다. 기본값은 true이며, false로 설정하면 대소문자를 구분하지 않고 일치하는 요소를 찾는다.
정규 표현식 사용
정규 표현식을 사용하여 텍스트를 찾을 수 있다. 정규 표현식을 사용하면 텍스트의 일부만 일치하거나 대소문자를 구분하지 않고 찾을 수 있다.
screen.getByText(/hello/i) // 대소문자 구분 없이 hello를 찾음
screen.getByText(/world/) // world를 포함하는 텍스트를 찾음
함수 사용
함수를 사용하여 텍스트를 찾을 수 있다. 함수를 사용하면 텍스트를 동적으로 찾을 수 있다.
함수의 인자값은 2가지이다.
(content?: string, element?: Element | null) => boolean
// hello로 시작하는 텍스트를 찾음
screen.getByText((content, element) => content.startsWith("hello"))
// p 태그 중 hello를 포함하는 텍스트를 찾음
screen.getByText((content, element) => {
return content.includes("hello") && element.tagName === "P"
})
'시작 > TIL(Today I Learned)' 카테고리의 다른 글
React Testing Tutorial(9) - findBy (0) | 2024.09.18 |
---|---|
React Testing Tutorial(7) - getByDisplayValue, getByAltText, getByTitle, getByTestId (1) | 2024.09.08 |
React Testing Tutorial(6) - getByLabelText(), getByPlaceholderText(), getByText() (0) | 2024.09.01 |
React Testing Tutorial(5) - getByRole, getByRole option (0) | 2024.08.25 |
React Testing Tutorial(4) - RTL Queries (0) | 2024.08.15 |
댓글