Skip to content

Ts-jest

TypeScript 코드를 jest에서 테스트할 경우 필요.

Installation

테스트 유닛 작성시 jest의 타입 정보 제공을 위해 @types/jest도 함께 설치하자:

yarn add -D ts-jest @types/jest

기본 설정파일은 다음과 같이 생성 가능:

yarn ts-jest config:init

Config

ts-jest에 typescript코드를 직접 넘겨주기 위해 다음과 같이 package.json파일의 jest속성(또는 jest.config.js 파일)에 preset을 사용하면 된다:

  "jest": {
    "preset": "ts-jest"
  }

또는 transform으로 매치된 파일을 넘기는 방법도 있다: (테스트 필요)

module.exports = {
  "testMatch": [
    "**/__tests__/**/*.+(ts|tsx|js)",
    "**/?(*.)+(spec|test).+(ts|tsx|js)"
  ],
  "transform": {
    "^.+\\.(ts|tsx)$": "ts-jest"
  },
}

Presets

ts-jest는 프로젝트의 기본 구성 대부분을 포함하는 여러 사전 설정과 함께 제공됩니다:

  • ts-jest/presets/default or ts-jest
  • ts-jest/presets/default-esm
  • ts-jest/presets/js-with-ts
  • ts-jest/presets/js-with-ts-esm
  • ts-jest/presets/js-with-babel
  • ts-jest/presets/js-with-babel-esm

Isolated Modules option

기본적으로 ts-jest는 전체 유형 검사 및 기능과 함께 프로젝트의 컨텍스트에서 TypeScript 컴파일러를 사용합니다. 그러나 TypeScript에서 "Isolated Modules"이라고 부르는 각 파일을 개별적으로 컴파일하는 데 사용할 수도 있습니다. 이것이 바로 isolatedModules 옵션 (기본값은 false임)이 하는 일입니다.

유형 검사 기능과 const enum과 같은 일부 기능을 잃게 되지만 캐시를 비활성화한 상태(jest --no-cache)로 Jest를 사용하려는 경우 테스트가 훨씬 빠르게 실행됩니다.

유형 검사를 비활성화하고 각 파일을 격리된 모듈로 컴파일하는 방법은 다음과 같습니다.

jest.config.js에서 적용할 경우:

module.exports = {
  // [...]
  globals: {
    'ts-jest': {
      isolatedModules: true
    }
  }
};

package.json에서 적용할 경우:

{
  // [...]
  "jest": {
    "globals": {
      "ts-jest": {
        "isolatedModules": false
      }
    }
  }
}

Troubleshooting

Cannot find module

@로 시작하는 모듈 경로는 다음과 같은 설정이 필요하다:

  "jest": {
    "preset": "ts-jest",
    "moduleNameMapper": {
      "@/(.*)$": "<rootDir>/src/$1"
    }
  }

See also

Favorite site