본문 바로가기

javascript/이외

jest - 자바스크립트 테스팅 프레임워크

https://jestjs.io/

 

Jest

By ensuring your tests have unique global state, Jest can reliably run tests in parallel. To make things quick, Jest runs previously failed tests first and re-organizes runs based on how long test files take.

jestjs.io

jest는 자바스크립트 코드를 위한 테스팅 프레임워크 중 하나이다.

Babel, Typescript, Node 등의 환경 및 React, Angular, Nest 등 프레임워크에서도 지원한다고 한다.

나같은 경우는 nestjs에서 내부적으로 테스팅에 사용되는 것을 알고, 어떻게 사용해야하는지 궁금하여 알아보게 되었다.

 

설치

 

자바스크립트 사용

npm install --save-dev jest

 

타입스크립트 사용

//CLI
npm install --save-dev jest @types/jest ts-jest

//package.json
"jest": {
    "roots": [
      "<rootDir>/src"
    ],
    "testMatch": [
      "**/__tests__/**/*.+(ts|tsx|js)",
      "**/?(*.)+(spec|test).+(ts|tsx|js)"
    ],
    "transform": {
      "^.+\\.(ts|tsx)$": "ts-jest"
    }
  }
  
  "scripts": {
    "jest-test": "jest --watch"
  },

 

패키지 설치

 

  • jest : 테스팅 프레임워크.
  • @types/jest : jest에 대한 type 제공.
  • ts-jest : typescript 코드의 transform에 사용. babel도 사용할 수 있다.

https://jestjs.io/docs/getting-started#using-typescript

 

package.json에 설정 추가

 

  • root : 테스트 파일을 검색하는 위치로, 여러개를 설정할 수 있다.
  • testMatch : 인식하는 테스트 파일의 이름.
  • transform : typescript 코드를 jest에서 사용하기 위한 변환기. 직접 구현할 수도 있다.

https://jestjs.io/docs/code-transformation#writing-custom-transformers

 

사용법

 

기본 구조는 다음과 같다.

describe('Space', () => {
    beforeEach(() => {
    	//something before each
    });
    
    beforeAll(() => {
    	//something before All
    });
    
    afterEach(() => {
    	//something after each
    });
    
    afterAll(() => {
    	//something after All
    });
    
    it('some message / test case1', () => {
        expect(target).toBe(expected); 
    });
    
    it('some message test case2', () => {
        expect(target).toBe(expected); 
    });
    ...
});
  • describe : 'Space'로 대표되는 공간을 만든다.
  • beforeEach/afterEach : describe 내의 테스트케이스 각각에 대해 실행 전/후에 전달된 callback을 실행한다.
  • beforeAll/afterAll : describe 내의 모든 테스트가 시작되기 전/ 끝난 후에 전달된 callback을 실행한다.
  • expect : 특정 값에 대한 조건을 걸어준다. expect(A).toBe(3). 이면, A == 3인지 검사한다.