[react-testing-library] react-testing-library란?
글 작성자: 망고좋아
반응형
🎯 react-testing-library
- 테스트가 소프트웨어가 사용되는 모습을 닮을수록, 테스트를 더욱 신뢰할 수 있게 된다.
- The more your tests resemble the way your software is used, the more confidence they can give you.
- 사용되는 모습이란? 사용자가 직접 앱을 사용하는 모습이다.
- React 컴포넌트의 특정 메서드나 상태를 테스트하는 게 아니라, 실제 유저가 사용하는 방식대로 테스트하는 접근하는 것이다.
- 유저가 페이지에서 어떤 DOM 요소에 접근하는 방법을 흉내 낸다.
- 이 방식으로 테스트 코드를 작성하면, 내부 구현이 바뀌어도 테스트가 깨지지 않는다.
- React 컴포넌트가 렌더링 한 결과에 대한 접근만 가능하다.
- 결과 중심의 테스트
- 쿼리는 내부 상태나 내부 메서드에 접근할 수 없게 설계됨.
📝 get
getBy
관련 쿼리는 원하는 요소를 찾지 못할 경우나 여러 개의 요소를 찾을 경우 에러를 던진다.getAllBy
관련 쿼리는 여러 요소를 찾아 배열을 반환한다. 원하는 요소를 찾지 못할 경우 에러를 던진다.- 원소가 반드시 페이지에 존재해야만 하는 경우 활용할 수 있다.
📝 find
findBy
관련 쿼리는 원하는 원소가 없더라도 비동기적으로 기다리게 된다.- 여러 원소를 찾거나, 정해진 timeout동안 찾지 못하면 에러를 던진다.
findAllBy
관련 쿼리는 여러 원소를 검색해 배열을 반환한다. 정해진 timeout동안 찾지 못하면 에러를 던진다.- Promise를 리턴하며 실패 시 reject, 성공 시 resolve.
- 어떤 유저의 동작 후에 등장하는 원소 등을 테스트하고자 할 때 활용한다.
describe("비동기 컴포넌트", () => {
test("renders posts if request succeeds", async () => {
render(<Async />);
const listItemElements = await screen.findAllByRole("listitem");
// 한 개 이상의 item을 가져오니까 findAllByRole 사용
// find는 원하는 원소가 없더라도 비동기적으로 기다리게 된다.
expect(listItemElements).not.toHaveLength(0);
//성공하면 빈 배열을 가져오지 않으니까 not.toHaveLength(0)를 통해서 빈 배열이 아닌지 test
});
});
const listItemElements = screen.findAllByRole("listitem", {}, {});
// 두 번째 인자는 exact를 설정, 세 번째 인자는 timeout 기간을 설정(디폴트는 1초)
📝 query
- queryBy 관련 쿼리는 getBy와 비슷하게 원소를 찾아 반환하나, 못 찾을 경우 에러를 던지지 않고 null을 반환한다. 여러 원소를 찾으면 에러를 던진다.
- queryAllBy 관련 쿼리는 getAllBy와 비슷하게 여러 개의 원소를 찾아 배열로 반환하나, 하나도 찾지 못하면 에러 대신 빈 배열을 반환한다.
- 특정 요소를 찾을 수 없음을 assertion의 기준으로 둘 때 활용된다.
📝 container
- container는 컴포넌트를 렌더 한 결과를 감싸는 원소
- queryselector(), querySelectorAll()을 이용해 selector 문법으로 원소를 선택할 수 있다.
📝 jest-dom
- react-testing-library는 jest를 확장하여, 좀 더 쓰기 편한 assertion을 제공한다.
- toBeInTheDocument(), toHaveValue(), toBeDisabled(), toBeVisible() 등 DOM 테스팅에 특히 유용한 assertion 메서드를 제공한다.
반응형
'프로그래밍 > testing' 카테고리의 다른 글
[react-testing-library] 유저 이벤트 (0) | 2022.01.17 |
---|---|
[react-testing-library] 쿼리의 우선순위 (0) | 2022.01.17 |
[Jest] Async assertion (0) | 2022.01.17 |
[Jest] Assertion Matchers 활용 (0) | 2022.01.17 |
[jest] jest란? (0) | 2022.01.17 |
댓글
이 글 공유하기
다른 글
-
[react-testing-library] 유저 이벤트
[react-testing-library] 유저 이벤트
2022.01.17 -
[react-testing-library] 쿼리의 우선순위
[react-testing-library] 쿼리의 우선순위
2022.01.17 -
[Jest] Async assertion
[Jest] Async assertion
2022.01.17 -
[Jest] Assertion Matchers 활용
[Jest] Assertion Matchers 활용
2022.01.17