카테고리 없음

[Node.js_4기] TIL : Test Code (24/02/20)

TUNA_K 2024. 2. 20. 19:11
목차

 

1. 학습 내용

2. 내용 정리

3. 예제

4. 생각 정리

 

1. 학습 내용 

 

01. 테스트코드

02. Jest를 사용한 테스트코드 작성

 

2. 내용 정리 

 

01. 테스트 코드

 

1) 테스트 코드 : 작성한 코드에 문제가 없는지 확인하기 위해 작성하는 코드

코드가 멀쩡함을 보여주는게 아니라, 코드가 멀쩡하다면 나올 결과를 설정하고 검증하기 위한 것.

 

2) 테스트 코드 종류 

단위 테스트 : 가장 작은 규모의 기능 테스트

통합 테스트 : 다양한 기능을 합쳤을때 생기는 문제 방지

E2E 테스트 : 백엔드부터 시작해서 최종적으로 웹 페이지까지 원하는대로 동작하며 원하는 데이터를 잘 보여주는지 확인

돌연변이 테스트(번외)

ex) 넷플릭스의 카오스 몽키 솔루션(카오스 엔지니어링)

 

3) Jest : 페북에서 개발한 테스팅 프레임워크

React와의 궁합 덕분에 가장 많이 사용되는 테스팅 프레임워크, 기본 지원하는 테스팅 프레임워크

-> 테스트 코드 표현이 다른 프레임워크보다 훨씬 간결하다!

 

4) Jest 설치 

- 설치

yarn add -D jest

- package.json 수정

{
...
  "main": "index.js",
...
}

이 부분에
{
  "license": "MIT",
  "type": "module",
  "scripts": {
    "test": "node --experimental-vm-modules node_modules/.bin/jest"
  },
}
추가

-> jest를 yarn test로 실행 가능

 

 

 

3. 예제 

 

02. Jest를 사용한 테스트코드 작성

test() : 단위 테스트를 묶어주는 함수

expect() : 정상적인지 확인하기 위한 표현식 작성 함

 

 - 검증 함수 기반 코드 - 

export const isEmail = (value) => {
  return false;
};

아래의 조건을 만족하는 test 함수는

  • 입력한 이메일 주소에는 "@" 문자가 1개만 있어야 이메일 형식이다.
  • 입력한 이메일 주소에 공백(스페이스)이 존재하면 이메일 형식이 아니다.
  • 입력한 이메일 주소 맨 앞에 하이픈(-)이 있으면 이메일 형식이 아니다.
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);
});

isEmail은 항상 false를 return한다.

위의 테스트 코드를 기반으로 isEmail을 디버깅한다면

export const isEmail = (value) => {
  const email = (value || '');

  if (email.split('@').length !== 2) {
      return false;
  } else if (email.includes(' ')) {
      return false;
  } else if (email[0] === '-') {
      return false;
  }

  return true;
};

 

 

4. 생각 정리 

 

실제 개발은 개발 - 테스트 - 수정 -  테스트 - 수정 순으로 진행하여 끊임없이 코드를 검증해야 한다.

(물론 제대로 지키진 못했다...)

이는 서비스가 복잡해질수록 더욱 중요해진다.