test('"React 테스팅 라이브러리" 문구를 포함합니다', () => {render(<App />);// 특정 텍스트를 가진 요소가 문서에 포함되어 있는 지 검사합니다.expect(screen.getByText('React 테스팅 라이브러리')).toBeInTheDocument()})
test('App 컴포넌트 렌더링', () => {render(<App />);// 테스트 예시: ' 테스트 '// 실패expect(screen.getByText('테스팅')).toBeInTheDocument()// 실패expect(screen.getByText(' 테스팅')).toBeInTheDocument()// 성공!expect(screen.getByText(/\s?테스팅\s?/)).toBeInTheDocument()})
getByRole
getByRole() 함수는 일반적으로 WAI-ARIA aria-label, role 속성을 가진 요소를 검색하는 데 사용됩니다. RTL은 시각적으로 표시되는 텍스트 외에도 접근성 역할(Role)을 통해 대상(요소)를 선택할 수 있습니다. getByText()와 함께 RTL에서 널리 사용되는 검색 함수입니다.
test('img 요소를 포함하는 지 검사합니다.', () => {render(<App />)// 이미지(img) 역할을 가진 요소가 문서에 포함되어 있는 지 검사합니다.expect(screen.getByRole('img')).toBeInTheDocument()})
getBy*() 함수 외에도, 변형 된 queryBy*(), findBy*() 함수를 사용해 대상(요소)을 찾을 수 있습니다.
queryBy
queryByText()
queryByRole()
queryByLabelText()
queryByPlaceholderText()
queryByAltText()
queryByDisplayValue()
findBy
findByText()
findByRole()
findByLabelText()
findByPlaceholderText()
findByAltText()
findByDisplayValue()
getBy VS queryBy 비교
getBy로 존재하지 않는 대상을 검색할 때 다음과 같은 오류가 출력됩니다. 오류 메시지를 살펴보면 검색한 텍스트가 여러 요소로 구분되어 있어 문제가 발생한 오류임을 안내합니다.
TestingLibraryElementError: Unable to find an element with the text: /React 테스팅 라이브러리/. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible.
/Ract 테스팅 라이브러리/ 텍스트로 요소를 찾을 수 없습니다. 이는 텍스트가 여러 요소에 의해 분할되었기 때문일 수 있습니다. 이 경우 텍스트 매처를 보다 유연하게 만드는 함수를 제공할 수 있습니다.
앞서 getBy, queryBy, findBy 검색 함수를 살펴봤습니다. 3가지 유형의 함수 모두 단수(1개) 대상을 검색해 찾을 때 사용합니다. 만약 복수(2개 이상)의 대상을 검색해 찾고자 한다면? getAllBy, queryAllBy, findAllBy 검색 함수를 활용합니다. All이 들어간 검색 함수는 대상 집합(배열)을 반환합니다.