[TIL_2023.12.06] Node.JS - 테스트코드

김효진·2023년 12월 6일
0
post-custom-banner
  1. 테스트코드란? 개발한 코드가 개발자가 의도한대로 동작하는지 작성하는 코드
  • 테스트 코드의 목적은 “내 코드가 멀쩡하다!” 라고 증명하기 위한 것이 아니라, "내 코드가 멀쩡하다면 이렇게 결과가 나와야 한다!" 라는 기대치를 설정하고 검증하기 위한 것
  1. 테스트코드의 종류
  • 단위테스트(unit test): 가장 작은 규모의 기능을 테스트
  • 통합 테스트 (Integration Test) : 다양한 기능을 합쳤을때 생기는 문제를 방지하기 위한 테스트
  • E2E 테스트 (End-to-end Test): 끝에서 끝(종단 간)을 의미하는 End to end 테스트 -> 백엔드부터 시작해서 최종적으로 웹 페이지가 원하는대로 동작하며 원하는 데이터를 잘 보여주는지 확인
  1. 테스팅 프레임워크 Jest
  • Node.js를 통해 사용하고 있는 언어인 JavaScript에서 사용이 가능한 테스팅 프레임워크의 종류는 매우 다양한데, Jest는 페이스북에서 개발한 프론트엔드 라이브러리인 React.js와도 궁합이 매우 좋아 엄청난 성장세를 보이며 2022년 기준 JavaScript 개발자들 사이에서 가장 많이 사용되는 테스팅 프레임워크로 뽑힘
  1. Jest 사용법 - 단위테스트 예시
    1) DevDependencies로 jest를 설치
    $yarn add -D jest
    2) package.json 파일 수정하기
    "license": "MIT", 다음 줄에서, 아래의 코드 추가 -> jest를 yarn test 와 같은 명령어로 실행시킬 수 있음
  "type": "module",
  "scripts": {
    "test": "node --experimental-vm-modules node_modules/.bin/jest"
  },

3) 테스트 할 간단한 함수 만들어보기

  • 프로젝트 폴더 안에, validation.js 라는 이름으로 파일을 하나 생성 후
    아래의 코드를 validation.js 파일에 붙여넣고 저장

    // validation.js
    
    export const isEmail = (value) => {
      // value가 이메일 형식에 맞으면 true, 형식에 맞지 않으면 false를 return 하도록 구현했음
      return false;
    };
  • 테스트 코드를 작성할 파일을 생성 일반적인 관례로 '테스트할파일이름.spec.js' 와 같은 형식으로 파일을 만듬. 아래의 코드는 테스트코드 예시

    • 요구사항 1개마다 test 함수를 1개씩 만들고, 그 안에 테스트 코드를 작성

    • 요구 사항 예시
      - 입력한 이메일 주소에는 "@" 문자가 1개만 있어야 이메일 형식이다.
      - 입력한 이메일 주소에 공백(스페이스)이 존재하면 이메일 형식이 아니다.
      - 입력한 이메일 주소 맨 앞에 하이픈(-)이 있으면 이메일 형식이 아니다.

      // validation.spec.js
      
       import { isEmail } from './validation';
      
       test('입력한 이메일 주소에는 "@" 문자가 1개만 있어야 이메일 형식이다.', () => {
       expect(isEmail("my-email@domain.com")).toEqual(true); // 1개만 있는 상황
       expect(isEmail("my-email@@@@domain.com")).toEqual(false); // 여러개 있는 상황
       expect(isEmail("my-emaildomain.com")).toEqual(false); // 하나도 없는 상황
       });
      
       test("입력한 이메일 주소에 공백(스페이스)이 존재하면 이메일 형식이 아니다.", () => {
         expect(isEmail("myemail@domain.com")).toEqual(true);
         expect(isEmail("my email@domain.com")).toEqual(false);
       });
      
       test("입력한 이메일 주소 맨 앞에 하이픈(-)이 있으면 이메일 형식이 아니다.", () => {
         expect(isEmail("e-m-a-i-l@domain.com")).toEqual(true);
         expect(isEmail("-email@domain.com")).toEqual(false);
       });
    • failed가 있도록. 즉, 실패하는 테스트가 최소 하나라도 있도록 작성해주기!
      -> 만약 항상 모든 코드가 성공한다면 지금 작성한 테스트 코드에 빈틈이 많으며, 자신의 코드의 결함을 찾지 못하는 테스트 코드를 작성한것

    4) 실패하는 테스트가 있었다면 이제 테스트가 통과할 수 있도록 isEmail 함수 디버깅 한 후 테스트 코드를 한번 더 실행하여 모두 통과하는지 확인

profile
더 많은 사람들이 더 좋은 정보와 서비스를 누릴 수 있게!!
post-custom-banner

0개의 댓글