효과적인 반응 구성 요소 테스트가 중요합니다. RTL (React Testing Library) 은이 프로세스를 단순화하여 사용자 상호 작용 테스트를 강조합니다. 이 기사는보다 효율적이고 유지 관리 가능한 단위 테스트를 작성하기위한 5 가지 고급 RTL 기술을 제시합니다.
의 경우 화면 render ()
에서 직접 파괴 쿼리를 피하십시오. 화면
객체를 사용하면 가독성과 선명도가 일관되게 향상됩니다.
이익:
예:
대신 :
const { getByText } = render();
expect(getByText(/click me/i)).toBeInTheDocument();
사용:
render();
expect(screen.getByText(/click me/i)).toBeInTheDocument();
이 접근법은 더 큰 테스트 스위트에서 일관성을 유지합니다.
구성 요소 렌더링 요소의 경우 비동기 적으로 (예 : API 호출 후)
findby 쿼리를 사용하여 를 사용하십시오. 이것은 요소 렌더링 후에 만 어설 션이 실행되도록합니다.
이익:
타이밍 문제로 인해 벗겨진 테스트를 제거합니다.
비동기 구성 요소에 대한보다 강력한 테스트를 만듭니다. // 구성 요소를 비동기로 가져 와서 사용자 이름을 표시합니다
렌더 (
// Component asynchronously fetches and displays a username
render( );
const userName = await screen.findByText(/john doe/i);
expect(userName).toBeInTheDocument();
findby 는 결합 된 getby
및 기능에 선호됩니다
기능 기능. 함께 사용하지 마십시오.
render (
render( );
await waitFor(() => {
expect(screen.getByText(/john doe/i)).toBeInTheDocument();
});
3.
특정 컨테이너 내에서 요소를 타겟팅 할 때 는 모호한 일치를 방지합니다.
의도하지 않은 요소 선택을 방지합니다.
세우다( ); const namelabel = 내 (screen.getByrole ( 'Group')). getByLabelText (/name/i); 기대 (namelabel) .tobeinthedocument ();
render(
);
const nameLabel = within(screen.getByRole('group')).getByLabelText(/Name/i);
expect(nameLabel).toBeInTheDocument();
fireevent userevent 는 타이핑, 클릭 및 탭 빙을 포함하여보다 현실적인 사용자 상호 작용 시뮬레이션을 제공합니다.
이익:
보다 정확한 이벤트 시뮬레이션.
'@testing-library/user-event'에서 userevent import userevent;
렌더 (
import userEvent from '@testing-library/user-event';
render( );
const emailInput = screen.getByLabelText(/email/i);
const passwordInput = screen.getByLabelText(/password/i);
const submitButton = screen.getByRole('button', { name: /submit/i });
await userEvent.type(emailInput, '[email protected]');
await userEvent.type(passwordInput, 'password123');
await userEvent.click(submitButton);
expect(screen.getByText(/welcome/i)).toBeInTheDocument();
5.
debug ()
이익:
누락 된 요소 또는 테스트 실패를 빠르게 식별합니다.
render (
render( );
screen.debug(); // Logs the DOM structure
const 섹션 = screen.getByrole ( 'region'); 내 (섹션) .debug ();
render( );
await waitFor(() => {
expect(screen.getByText(/john doe/i)).toBeInTheDocument();
});
추가 팁 : 사용자 상호 작용에 중점을 둡니다.
결론:부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3