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

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. 생각 정리 

 

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

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

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