Copy export default function FollowersList () {
const [ followers , setFollowers ] = useState ([]);
useEffect (() => {
fetchFollowers ();
} , []);
const fetchFollowers = async () => {
const { data } = await axios .get ( 'https://randomuser.me/api/?results=5' );
setFollowers ( data .results);
};
...
Copy describe ( 'FollowersList' , () => {
it ( 'should render FollowerList Element' , async () => {
render (< MockFollowerList />);
const followerDivElement = screen .getByTestId ( 'follower-item-0' );
expect (followerDivElement) .toBeInTheDocument ();
});
});
안타깝게도 에러가 발생한다...
그렇다면 왜 에러가 발생할까? 이유는 간단하다. 컴포넌트가 렌더링 되고 난 이후에 useEffect
를 실행해서 비동기로 데이터를 가져오고, 세팅해야하는데 우리의 테스트는 이런 비동기를 기다리기 전에 바로 테스트를 해버리는것. 따라서 발견하지 못하고 에러가 발생한다. 이런 경우 사용할 수 있는 명령어를 이전에 학습하긴 했다. 바로 find
를 사용하는 것.
아래는 수정된 코드다.
Copy describe ( 'FollowersList' , () => {
it ( 'should render FollowerList Element' , async () => {
render (< MockFollowerList />);
const followerDivElement = await screen .findByTestId ( 'follower-item-0' );
expect (followerDivElement) .toBeInTheDocument ();
});
});