screen.findAllByTestId 질문
it('보여줄 상품 리스트가 더 있는 경우 show more 버튼이 노출되며, 버튼을 누르면 상품 리스트를 더 가져온다.', async () => {
const { user } = await render(<ProductList limit={PRODUCT_PAGE_LIMIT} />);
await screen.findAllByTestId('product-card');
const showMoreButton = screen.getByRole('button', {
name: 'Show more',
});
expect(showMoreButton).toBeInTheDocument();
await user.click(showMoreButton);
expect(await screen.findAllByTestId('product-card')).toHaveLength(
PRODUCT_PAGE_LIMIT * 2,
);
});여기서 render 이후에 await screen.findAllByTestId('product-card'); 를 하는 이유가 있나요? 저걸 해주지 않으면 버튼이나 상품 아이템을 그리지 못하는 건 아는데... 그려지는 이유를 모르겠어서요 await로 찾을때까지 대기하는 걸로 이해하면 될까요?
1. 그렇다면 render 호출 이후 요소를 찾지 않아도 되는 경우에도 await screen.findAllByTestId('product-card');를 해주어야 하는걸까요?
2. 아래와 같이 하는거랑 차이가 있나요?
it('보여줄 상품 리스트가 더 있는 경우 show more 버튼이 노출되며, 버튼을 누르면 상품 리스트를 더 가져온다.', async () => {
const { user } = await render(<ProductList limit={PRODUCT_PAGE_LIMIT} />);
const showMoreButton = await screen.findByRole('button', {
name: 'Show more',
});
expect(showMoreButton).toBeInTheDocument();
await user.click(showMoreButton);
expect(await screen.findAllByTestId('product-card')).toHaveLength(
PRODUCT_PAGE_LIMIT * 2,
);
});
답변 1
0
안녕하세요. 질문 주신 부분 차례대로 답변 드리겠습니다!
여기서 render 이후에 await screen.findAllByTestId('product-card'); 를 하는 이유가 있나요? 저걸 해주지 않으면 버튼이나 상품 아이템을 그리지 못하는 건 아는데... 그려지는 이유를 모르겠어서요 await로 찾을때까지 대기하는 걸로 이해하면 될까요?
우선 말씀해주신 것처럼 렌더링이 완료되었다는 것을 확인하는 즉, 대기하는 코드가 맞습니다.
상품 리스트를 사용하는 부분을 우선적으로 살펴보면 좋을 것 같은데요. (코드) ProductList에서 호출하는 API가 마무리 될 때까지 Suspense에 감싸져 있기 때문에 듣고계신 4.6장에서 설명하는 내용처럼 비동기 API가 마무리 될 때까지 대기가 필요해 findBy- API를 사용합니다.
1. 그렇다면 render 호출 이후 요소를 찾지 않아도 되는 경우에도 await screen.findAllByTestId('product-card');를 해주어야 하는걸까요?
상품 리스트가 완전히 로드되지 않았을 때 상태, 예를 들어 로딩이 완벽하게 되지 않은 상태에서 skeleton 화면이 나타난다 등을 검증할때는 굳이 상품 리스트가 로딩되는 것을 기다릴 필요가 없기 때문에 말씀해주신대로 굳이 기다리지 않아도 괜찮습니다.
2. 아래와 같이 하는거랑 차이가 있나요?
이 코드에서는 상품 리스트의 렌더링 완료 여부가 아닌, Show more 버튼이 노출될 때까지 대기하게 될건데요. 이런 경우 API 호출을 완료한 뒤 상품리스트의 렌더링이 완료되었음에도 불구하고 Show more 버튼이 노출되지 않는 케이스도 있을 수 있습니다. 그렇기 때문에 상품 리스트가 제대로 렌더링이 안된건지 렌더링이 완료되었음에도 Show more 버튼이 렌더링 안되는 것인지 추가적으로 파악하는 과정이 발생하여 모호하게 느껴질 수 있는 부분이 존재할 수 있습니다. 각 단계 흐름의 가독성을 좋게 하기 위해 나눠 작성했다고 이해해주시면 좋을 것 같습니다.
혹시 이해가 안되는 부분 있다면 편하게 댓글 남겨주세요! 감사합니다~ 새해 복 많이 받으세요!
mockZustand
0
67
2
프로젝트 세팅 오류 및 버전 오류 문제 문의
0
97
2
toggleIsModalOpened 테스트 할때 궁금한 점이 있습니다.
0
43
2
로딩/에러처리 검증은 어떻게 하는게 좋을까요?
0
65
1
통합 테스트에서 API 요청에 대한 검증은 이루어지지 않아도 괜찮을까요?
0
71
2
lint에러..
0
74
1
단언문 순서에 따라 테스트 결과가 왜 달라지나요?
0
109
2
useNavigate 테스트 시, 검증 대상 질문입니다.
0
113
2
강의 예시프로젝트 업데이트좀 부탁드립니다.
2
166
2
통합테스트와 단위테스트 파일 분리
0
109
1
grid 양옆에 margin은 어디서 설정되어있는건가요 ?
0
131
1
vitest 설치했는데
0
207
2
2부 할인쿠폰 관련
0
177
1
에러 해결 방법
0
407
2
직접 구현한 atom 컴포넌트 테스트 범위 질문
0
175
1
setup, teardown 동작 순서
0
212
1
debounce 함수 테스트 정확도 관련 질문입니다.
0
177
2
ProductFilter test 어떤 방식이 더 선호되는 방식일까요?
0
204
2
통합 테스트 작성 방식에 대해 궁금한 점이 있습니다
0
259
2
vitest Extension 알려주세요.
0
268
1
2.1 강의 질문있습니다.
0
140
1
useNavigate()을 검증할 때 이해가 안되는 부분이 있습니다.
0
248
2
toHaveStyle 메서드 사용이 조금 이상한 것 같습니다.
0
196
2
TestPayment에 쿠폰 정보를 prop으로 전달하는 이유
0
186
2





