Jest & Mocha별 모듈 path 특정화 하기

December 31, 2019

프로젝트내에 e2e 테스트 코드를 작성할때, Mocha에서 timeout에 대한 제한이 있어 관련 코드를 jest로 변경하고자 했습니다. Mocha에서 app-module-path 플러그인을 통해서 path를 특정화 해서 사용하고 있었는데, 이를 jest로 변경하면서 어떠한 형태로 설정해야 하는지 검토중에 있었던 이슈를 기록하고자 합니다.

mocha에서 path 특정하게 설정하기 - app-module-path 이용

app-module-path 플러그인은 간단하게 module에 대한 path를 특정한 path로 연결할 수 있는 플러그인입니다. Mocha의 경우 현재 프로젝트에서는 app-module-path 플러그인을 이용해서 모듈의 path를 특정하게 설정해서 사용하고 있었습니다. app-module-path를 설정하는 방법은 간단합니다.

app-module-path를 이용해서 설정하는 방법은 간단합니다. 테스트 파일 내에 플러그인을 사용할 파일을 생성합니다. 간단하게 module.js 로 만들도록 하겠습니다.

# app-module-path를 설치합니다.
npm i app-module-path --save-dev
// module.js
require('app-module-path).addPath(__dirname);

app-module-path모듈에 내장되어 있는 addPath function을 이용하여 모듈을 설치할 경로를 설정해줍니다. mocha를 이용한 테스트를 위한 script는 다음과 같이 작성합니다.

{
  "scripts": {
    "test": "mocha --require path/to/module.js **/*.spec.js"
  }
}

여기서 path/to/module.js는 module.js를 만든 폴더로 설정하셔야 합니다.

만약, src/test/test.js코드를 테스트하고자 하신다면, 다음과 같이 테스트 코드를 작성하시면 됩니다.

// test.spec.js
const test = require('src/test/test');

jest에서 path 특정하게 설정하기

jest의 경우 해당 내용을 설정할 수 있는 moduleNameMapper option이 존재합니다. 해당 option에서 특정한 path를 설정해주면 간단하게 테스트가 가능합니다. 마치 webpack의 resolve.alias option과 유사합니다.

아까와 같은 경로로 설정하고자 하신다면, moduleNameMapper option에서 각 path를 설정해 줍니다.

// jest.config.js
'use strict';

module.exports = {
  moduleNameMapper: {
    'src/(.+)$/': '<rootDir>/src/$1',
  },
};

src 하위에 있는 폴더들은 <rootDir> 이라는 jest내 설정된 rootPath 변수 밑의 src 내 파일을 전체 매핑하게 됩니다. 이러한 경우, mocha에서 테스트한 코드를 그대로 사용 가능합니다.

...