Skip to main content

console.log 가 있는데 Testing 이 왜 필요하죠?

Introduction

테스트는 소프트웨어 개발에서 필수적인 과정입니다. 개발자들은 구현한 기능이 올바르게 작동하는지 확인하기 위해 테스트를 수행합니다. 주로 어떤 방식으로 테스트를 진행할까요?

주로 두 가지 방법을 사용합니다:

  1. console.log
  2. 사용자의 동작 (클릭, 스크롤 등)

이 두 가지 방법은 기능 개발에 있어서 유용하게 사용되어 왔습니다. 그러나 아래와 같은 상황에서는 어떨까요?

  1. 20개의 필터 종류로 게시물을 필터링해야 하는 상황
  2. 각 게시물이 5가지 종류 중 하나이고, 게시물 클릭 시 해당 종류에 맞는 경로로 이동해야 할 때

이러한 경우 모든 가능한 경우의 수를 테스트하려면 100개의 테스트를 수행해야 할 것입니다. 일반적으로 10번 이내로 테스트하며 기능을 확인하고 동작하는지 확인합니다. 그러나 시간이 충분하다면, 리팩토링을 할 수 있을까요? 이미 작동 중인 코드를 변경하는 것은 거리낌이 가는 일일 것입니다. 특히 100가지 경우에 영향을 미칠 수 있는 경우에는 더욱 그렇습니다. 테스트 코드는 위와 같은 경우를 위해 존재합니다.

  • 100 번의 테스트를 사람이 아닌 코드가 진행하게 함으로써, 시간을 줄이며 확신을 얻기 위해
  • 리팩토링을 자유롭게 하기 위해
  • 명시적으로 요구사항을 표시하기 위해

테스트 코드가 주는 이점

  1. 코드의 예상되는 동작을 문서화하는 효과
  2. 코드의 예상되는 동작을 검증하는 효과
  3. 코드의 예상되는 동작을 안전하게 변경하는 효과

항상 테스트 코드를 작성해야 할까요?

테스트 코드를 작성하는 이유는 시간을 절약하기 위해서입니다. 테스트 코드를 작성하는 데 드는 시간이 직접 테스트하거나 유지보수 시간을 절약하는 데에 비해 이득이 되어야 합니다. 이 판단은 개발자 개개인이 해야 합니다. 초기에는 작성하는 데 더 많은 시간이 들 수 있지만, 익숙해지면 효과를 누릴 수 있습니다. 따라서 간단한 유틸리티 함수부터 작성해 보는 것을 권장합니다.

테스트 코드 종류

테스트 코드는 크게 세 가지 종류로 구분할 수 있습니다:

  1. 단위 테스트: 함수, 클래스 등 개별 모듈이 의도한 대로 정확히 작동하는지 검증하는 테스트
  2. 통합 테스트: 단위 테스트가 끝난 모듈을 조합하여 전체 시스템이 의도한 대로 정확히 작동하는지 검증하는 테스트
  3. E2E (End-to-End) 테스트: 사용자의 관점에서 시스템이 의도한 대로 정확히 작동하는지 검증하는 테스트

위에서 아래로 갈수록, 작성하는데 환경에 대한 변수가 많기 때문에 디버깅이 어려워집니다. 따라서 탄탄한 단위 테스트를 우선 고려하는 것이 좋습니다.

테스트 코드 작성 프레임워크

JavaScript에서 인기 있는 두 가지 테스팅 라이브러리는 다음과 같습니다:

  1. Jest: 주로 단위 테스트에 사용됩니다.
  2. Cypress: 주로 E2E 테스트에 사용됩니다.

이 문서에서는 Jest를 사용하여 단위 테스트를 어떻게 수행하는지 소개하겠습니다.