PromleeBlog
sitemap
aboutMe

posting thumbnail
React 환경에서의 TDD 개요 - React로 시작하는 TDD 1편
Overview of TDD in React Environment - TDD with React Part 1

📅

들어가기 전에 🔗

안녕하세요.
오늘부터 우리는
React로 시작하는 TDD
라는 새로운 여정을 시작합니다.
많은 학생분이나 주니어 개발자분들이 백엔드 테스트(Java, Spring 등)에는 익숙하지만, 프론트엔드 테스트는 낯설어하는 경우가 많습니다.

"화면은 그냥 브라우저 켜서 클릭해 보면 되는 거 아니야?"

혹시 이렇게 생각하고 계시지 않나요?
물론 눈으로 확인하는 것도 중요하지만, 프로젝트가 커질수록 매번 모든 버튼을 눌러볼 수는 없습니다.
이 시리즈를 통해 우리는
React
컴포넌트를 튼튼하게 만드는 방법과, 테스트 코드가 주는 개발의 즐거움을 함께 배워볼 것입니다.
컴포넌트를 튼튼하게 만드는 방법
컴포넌트를 튼튼하게 만드는 방법

프론트엔드 테스트의 역할 🔗

프론트엔드 개발에서 테스트는 단순히 화면이 잘 나오는지를 검사하는 것이 아닙니다.
사용자가 우리 웹 사이트에서 겪을 수 있는
행동
경험
을 검증하는 것입니다.

React에서 TDD를 적용하는 이유 🔗

우리는 왜 굳이 테스트 코드를 먼저 짜는
TDD(테스트 주도 개발)
방식을
React
에 적용해야 할까요?

1. 자신감 있는 리팩토링 🔗

프론트엔드 코드는 자주 바뀝니다.
디자인이 바뀌기도 하고, 컴포넌트 구조를 나누기도 합니다.
테스트 코드가 없다면 코드를 고칠 때마다 "혹시 어디 깨진 곳 없나?" 하고 불안에 떨며 브라우저를 새로고침 해야 합니다.
하지만 테스트가 있다면, 구조를 마음껏 뜯어고쳐도 초록 불(테스트 통과)만 확인하면 되니 자신감이 생깁니다.

2. 살아있는 문서 역할 🔗

다른 사람이 짠 컴포넌트를 쓸 때 "이거 props로 뭘 줘야 해?" 하고 물어볼 필요가 줄어듭니다.
테스트 코드를 보면 이 컴포넌트가 어떤 상황에서 어떻게 동작하는지 명확하게 적혀 있기 때문입니다.
src/components/Button.test.js
// 이 테스트만 봐도 Button 컴포넌트의 주 사용법을 알 수 있습니다.
test('클릭하면 onClick 함수가 실행된다', () => {
  const handleClick = jest.fn();
  render(<Button onClick={handleClick}>저장</Button>);
  
  fireEvent.click(screen.getByText('저장'));
  
  expect(handleClick).toHaveBeenCalledTimes(1);
});

3. 빠른 피드백 🔗

브라우저를 띄우고, 로그인하고, 페이지 이동하고, 버튼을 누르는 과정은 생각보다 오래 걸립니다.
TDD 환경에서는 명령줄 하나로 수백 개의 기능을 몇 초 만에 검사할 수 있습니다.
개발 속도가 빨라지는 것은 덤입니다.

테스트 대상의 범위 🔗

그렇다면 우리는 무엇을 테스트해야 할까요?
모든 것을 다 테스트할 수는 없습니다.
React
테스트의 핵심 원칙은
"구현 세부 사항이 아닌, 사용자 관점을 테스트하라"
입니다.
이미지 제안: [빙산의 일각 그림. 물 위(사용자가 보는 화면/행동)는 테스트 대상, 물 아래(내부 변수/구현)는 테스트 제외]

앞으로 사용하게 될 도구들 🔗

이 시리즈에서는 가장 대중적이고 강력한 도구들을 사용할 예정입니다.

결론 🔗

오늘은
React
환경에서 TDD가 왜 필요한지, 그리고 무엇을 테스트해야 하는지에 대해 알아보았습니다.
핵심은 사용자에게 신뢰를 주는 코드를 작성하는 것입니다.

처음에는 테스트 코드를 짜는 것이 귀찮고 어렵게 느껴질 수 있습니다.
하지만 이 습관이 들면, 나중에는 테스트 없이 코드를 짜는 것이 더 불안해지는 시점이 옵니다.
마치 안전벨트 없이 운전하는 기분이 들 테니까요.
다음 시간에는 실제로 프로젝트를 생성하고,
Jest
React Testing Library
를 설정하여 첫 번째 테스트 환경을 구축해 보겠습니다.

참고 🔗