테스팅 라이브러리 Jest 사용하기

2022년 10월 22일

TOC

Jest

많이 사용되고 있는 테스트 도구인 Jest는 Zero Configuration 철학을 가지고 있어 별도의 설정 없이 빠르게 테스트 케이스를 작성할 수 있다.

Jest란 무엇인가?

Jest는 React를 만든 Facebook에서 개발한 테스팅 프레임워크(Testing Framework)이다. Babel, TypeScript, Node, React, Angular, Vue 등을 사용하는 프로젝트에서 작동하며, 프로젝트 내의 별도 설정이 필요 없이 바로 시작할 수 있는 Zero Configuration 철학을 가지고 있다. 테스트 코드의 모양이 직관적이고 문서화가 잘 이루어져 있어 많이 활용되고 있다.

간단한 테스트 해보기

간단히 사용해보기 위해 작은 프로젝트 디렉터리를 만들고 Jest를 설치해 보았다.

$ npm init -y   # default package.json 생성

Wrote to ~/jest-tutorial/package.json:
{
  "name": "jest-tutorial",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

> npm install jest --save-dev   # jest 설치

Jest를 설치한 후 package.json의 test scripts를 jest로 수정한다.

{
  "name": "jest-tutorial",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "jest" // 다음과 같이 수정
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "jest": "^29.2.1"
  }
}

디렉터리에 테스트 대상이 될 함수 funcAdd.js를 생성했다.

const funcAdd = {
  // 두 개의 인수를 받아 그 합을 리턴
  add: (num1, num2) => num1 + num2,
}

module.exports = funcAdd // 테스트 파일에서 사용할 수 있도록 내보내기

함수 파일 작성을 마쳤다면 이제 테스트 파일을 작성할 차례다. funcAdd.test.js를 만들고 테스트 코드를 다음과 같이 작성하였다.

const funcAdd = require("./funcAdd") // funcAdd 불러오기

test("1 = 1", () => {
  expect(1).toBe(1) // expect: 검증값 , toBe: 기대값
})

test("2 + 3 = 5", () => {
  expect(funcAdd.add(2, 3)).toBe(5) // funcAdd.add 성공 케이스
})

test("3 + 3 = 5", () => {
  expect(funcAdd.add(3, 3)).toBe(5) // funcAdd.add 실패 케이스
})

npm test를 실행하여 테스트 결과를 확인해보자. npm test는 프로젝트 내에서 ~.test.js와 같은 형식으로 되어 있거나, __tests__ 디렉터리 안에 있는 모든 파일을 테스트 파일로 인식하고 테스트를 실행시킨다.

$ npm test

> jest-tutorial@1.0.0 test
> jest

 FAIL  ./funcAdd.test.js
  ✓ 1 => 1 (1 ms)
  ✓ 2 + 3 = 5
  ✕ 3 + 3 = 5 (1 ms)

  ● 3 + 3 = 5

    expect(received).toBe(expected) // Object.is equality

    Expected: 5
    Received: 6

      10 |
      11 | test("3 + 3 = 5", () => {
    > 12 |   expect(funcAdd.add(3, 3)).toBe(5);
         |                             ^
      13 | });
      14 |

      at Object.toBe (funcAdd.test.js:12:29)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 2 passed, 3 total
Snapshots:   0 total
Time:        0.189 s
Ran all test suites.

아래 Tests에서 총 3개 중 2개 성공, 1개 실패했음을 확인할 수 있다.

세 번째 테스트 함수를 아래처럼 변경하여 테스트를 진행해볼 수도 있다.

test("3 + 3 ≠ 5", () => {
  expect(funcAdd.add(3, 3)).not.toBe(5) // not을 사용
})
$ npm test

> jest-tutorial@1.0.0 test
> jest

 PASS  ./funcAdd.test.js
  ✓ 1 => 1 (1 ms)
  ✓ 2 + 3 = 5 (1 ms)
  ✓ 3 + 3 ≠ 5

Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        0.166 s, estimated 1 s
Ran all test suites.

이처럼 Jest는 여러가지 방법으로 값을 테스트할 수 있게 다양한 matchers를 지원한다.


Reference

An Async Example · Jest

Jest로 기본적인 테스트 작성하기 | Engineering Blog by Dale Seo

Jest 강좌 | 코딩앙마

commune :: NPM 사용법 : npm init 다운받기/ npm install 모듈설치

npm init이란? : 네이버 블로그

Written by

yhuj79

🌱 Junior Developer