프론트엔드쪽 작업을 할때에 접하게 되는 것 중에 @testing-library 라는 것이 있다.
오늘은 프론트엔드 테스팅을 할 때 페이지 렌더 테스트 하는 방법에 대해서 알아보려고 한다.
필자는 React (w/ Typescript) 로 진행하였다.
<App /> 컴포넌트를 테스트할 예정이고,
해당 컴포넌트가 하는 일은 로그인 상태에 따라서 렌더링할 라우터를 결정한다.
간단한 코드 샘플을 보자
export const App = () => { return isLoggedInVar ? <LoggedInRouter /> : <LoggedOutRouter /> }
위와 같이 렌더링을 하는데, 내가 테스트 할 것은 isLoggedInVar 에 따라서 분류가 잘 되나 만하고 싶다.
저 라우터들 안에서 지지고 볶고 하는 것은 의미가 없다.
그러려면 저 라우터들을 Mock 해야 한다.
우리가 Mock 해야할 것 중 하나만 해보고자 한다, LoggedOutRouter 를 진행해보자.
그렇다면, import 하는 LoggedOutRouter 를 우리가 원하는 형태로 변경해야 한다.
특정 디렉토리에 있는 것을 우리가 원하는 간단한 형태로 해야 단위 테스트가 편하다.
아래 코드처럼 진행하면 된다 !
import React from "react"; import { render } from "@testing-library/react"; import App from "../app"; jest.mock("../../routers/logged-out-router", () => { return { LoggedOutRouter: () => <span>logged-out</span> } }); describe("<App />", () => { it("renders OK", () => { render(<App />); /* 이후 테스트 생략 */ }); });
이러면 <App /> 을 render 할 때, 그 안의 동작들로 인해 오류가 날 일도 없고, App Render 테스트 자체에 집중할 수 있게 된다.