Nest JS

Jest 단위 테스트 경로 설정

Choony 2024. 12. 2. 16:11

문제 상황

Nest js 프로젝트를 진행하며 테스트코드를 작성하고 실행하는데 겪은 문제이다.

 

테스트를 실행하게 되면 아래와 같은 에러가 발생하게 된다.

No tests found. exiting with code 1.

 

이는 작성한 테스트코드를 인식하지 못하는 문제인 것이다.

 

해결 방법을 알아보도록 하자.

 

해결 방안

현재 나는 아래와 같은 폴더 구조를 가지고 있다.

 

src와 test가 Root Directory 산하에 있는 걸 볼 수 있는데 package.json을 봐보자.

[BEFORE]
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.(spec|test)\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node",
  },

위 내용은 package.json 파일 중 jest에 관련된 내용이다. 

여기서 주의깊게 봐야 할 것은 rootDir이 현재 src로 되어있다는 것이다.

 

따라서 테스트를 실행했을때 src 디렉터리를 루트 디렉터리로 인식하게 되며 src 산하의 테스트 파일을 찾게 된다.

 

하지만 내 구조의 경우 test 디렉터리가 src 디렉터리와 독립적으로 위치하기 때문에 설정을 좀 바꿔주어야 한다.

[AFTER]
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": ".",
    "testRegex": ".*\\.(spec|test)\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node",
    "moduleNameMapper": {
      "^@/(.*)$": "<rootDir>/src/$1",
      "^test/(.*)$": "<rootDir>/test/$1"
    }
  },

rootDir의 변경과 moduleNameMapper의 추가를 보면 된다.

 

이렇게 변경하게 되면 테스트파일을 잘 인식하게 된다!!