React 테스트 라이브러리를 사용하여 텍스트 내용 테스트 향상
React 애플리케이션을 테스트할 때 여러 가지 방법으로 테스트를 작성할 수 있습니다.그러나 미세한 변화는 가독성과 유효성에 큰 차이를 일으킬 수 있다.
본문에서 나는 흔히 볼 수 있는 장면을 탐구할 것이다.변수 prop을 기반으로 일부 텍스트를 보여 주는 구성 요소를 테스트합니다.나는 기본적으로 React와 React 테스트 라이브러리에 익숙하다고 가정할 것이다.
이 예에서, 나는 이름을 받는 인사 구성 요소가 하나 있다.이것은 제공된 이름으로 맞춤형 환영 정보를 보여 줍니다.
function Greeting({name}) {
return <h1>Welcome {name}!</h1>
}
테스트해 봅시다.import {render, screen} from '@testing-library/react'
import Greeting from './greeting'
test('it renders the given name in the greeting', () => {
render(<Greeting name="Jane"/>)
expect(screen.getByText(`Welcome Jane!`)).toBeInTheDocument()
})
우리는 이런 테스트를 쓸 수 있을 뿐만 아니라, 틀림없이 통과할 수 있을 것이다.여기서, 우리는 예상한 텍스트가 나타나는지 검사할 것이다.하지만 우리는 몇 가지 문제를 해결해 볼 수 있다.테스트에서 변수 사용하기
test('it renders the given name in the greeting', () => {
const name = 'Jane'
render(<Greeting name={name}/>)
expect(screen.getByText(`Welcome ${name}!`)).toBeInTheDocument()
})
여기에서 우리는 이름을 변수에서 추출할 것이다.이제 더 분명한 것은 명칭이 테스트의 중점이다.우리는 FakerJs과 같은 라이브러리를 사용하여 무작위 이름을 만들 수 있다.이런 방식을 통해 우리는 특정한 명칭 자체가 중요하지 않고 명칭만 보여주면 된다고 전달할 수 있다.
import faker from 'faker'
test('it renders the given name in the greeting', () => {
const name = faker.name.firstName()
render(<Greeting name={name}/>)
expect(screen.getByText(`Welcome ${name}!`)).toBeInTheDocument()
})
접근 가능한 소자 테스트
이제 렌더링 중인 요소를 처리할 수 있습니다.우리는 텍스트로만 요소를 찾는 것이 아니라 그 역할(이 예에서
heading)을 통해 검사할 수 있다.우리는 name의 선택할 수 있는 두 번째 매개 변수에서 우리가 찾고 있는 텍스트를 getByRole 속성으로 제공합니다.expect(
screen.getByRole('heading', { name: `Welcome ${name}!` }
).toBeInTheDocument()
만일 우리가 구성 요소를 div이 아니라 h1으로 바꾸면 우리의 테스트는 실패할 것이다.우리의 이전 버전은 여전히 통과될 것이며, 이 변화를 일깨워 주지 않을 것이다.이러한 검사는 표기된 의미를 보존하는 데 매우 중요하다.
테스트 실패 메시지 개선
만약 우리가 구성 요소를 파괴하고 이름을 표시하지 않는다면, 우리의 실패 소식은 여전히 이상적이지 않다.

이것은 결코 무섭지 않다.Jest에서 찾을 수 있는 접근 가능한 요소를 제공합니다. 여기에서 이름이 없는 것을 볼 수 있습니다.그러나 만약 이것이 더 큰 구성 요소라면, 이 로그에서 문제를 찾아내는 데 시간이 걸릴 수 있습니다.우리는 더 잘할 수 있다.
expect(
screen.getByRole('heading', { name: /welcome/i }
).toHaveTextContent(`Welcome ${name}!`)
우리는 이곳에서 몇 가지 일을 했다.우리는 텍스트의 정적 부분을 추출했는데, 이 예에서 '환영' 이라는 단어이다.전체 텍스트 문자열에 따라 검색하지 않고 /welcome/i을 포함하는 헤딩 요소를 찾을 것입니다.우리는 일반 문자열이 아닌 정규 표현식을 사용하기 때문에 텍스트의 이 부분을 부분적으로 일치시킬 수 있습니다.다음에 우리는
toBeInTheDocument과 다른 매칭기를 사용할 수 있으며 우리가 발견한 jest-dom을 기대하는 것이 아니다.toHaveTextContent을 사용하여 요소의 텍스트가 예상에 맞는지 확인하십시오.이렇게 하는 것이 더 좋은 데는 두 가지 이유가 있다.우선, 텍스트를 읽으면, 텍스트의 내용은 우리가 검사해야 할 것들, 단지 일부 요소만 존재하는 것이 아니라는 것을 보여 준다.그 다음으로 우리는 더 좋은 테스트 실패 정보를 얻었다.
여기서 우리는 바로 문제의 소재를 보았다. 우리는 어느 곳에서도 그것을 찾을 필요가 없다.
요점을 요약하고 다시 말하다.
getByRole을 사용하여 구성 요소의 의미를 검증한다.toHaveTextContent을 사용하여 테스트가 검사 중인 출력을 전달한다.더 유용한 테스트 실패 소식을 얻을 수 있습니다.이 which query to use with React Testing Library 가이드도 유용하다.jest-dom documentation은 테스트를 개선할 수 있는 모든 일치기를 알려 줍니다.
Reference
이 문제에 관하여(React 테스트 라이브러리를 사용하여 텍스트 내용 테스트 향상), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alexkmarshall/better-tests-for-text-content-with-react-testing-library-2mc7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)