해결된 질문
작성
·
280
·
수정됨
1
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 버튼이 렌더링 안되는 것인지 추가적으로 파악하는 과정이 발생하여 모호하게 느껴질 수 있는 부분이 존재할 수 있습니다. 각 단계 흐름의 가독성을 좋게 하기 위해 나눠 작성했다고 이해해주시면 좋을 것 같습니다.
혹시 이해가 안되는 부분 있다면 편하게 댓글 남겨주세요! 감사합니다~ 새해 복 많이 받으세요!