jest 환경설정 부터 사용방법까지 정리하는 글입니다. 본 문서는 2021년 12월 27일의 공식문서를 기준으로 작성되었기 때문에 이후 발생한 업데이트와 관련해서 내용이 상이할 수 있습니다.
npm i -D jest // 데브 패키지로 설치
jest를 설치만 하면 node.js 환경에서 바로 사용할 수 있다. 하지만 우리의 목적은 babel로 인한 import / export 문법 혹은 웹팩 환경에서 트랜스파일 되는 타입스크립트 문법에서 jest를 실행시키는 것이다. 이를 위해서는 당연 추가 설정이 필요하다.
npm i -D babel-jest
module.exports = {
presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};
공식문서에서 소개하는 방법은 jest 실행시 내부적으로 process.env.NODE_ENV를 jest로 자동 설정해주고 있기 때문에 이를 활용하여 targets를 바꾸는 방법을 소개하고 있다.
// babel.config.js
module.exports = api => {
const isTest = api.env('test');
// You can use isTest to determine what presets and plugins to use.
return {
// ...
};
};
본인은 webpack.jest.js 라는 폴더를 새로 만들었고 jest 실행시 이 환경문서를 적용하여 targets를 설정해 주었다.
// package.json
...생략
scripts: {
...
"test": "jest --config=jest.config.js",
}
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript',
],
};
단 주의점이 있다. 위 설정은 typescript의 문법으로 작성된 코드를 jest가 실행할 수 있게만 한다. 즉 jest가 별도의 타입 체크를 하지 않는다.
따라서 타입 체크를 원한다면 ts-jest를 설치하거나 별도의 타입 체크 시스템을 마련해야 한다.
그리고 Jest에서 타입 체크를 할 예정이라면 타입 정의를 포함하고 있는 @types/jest를 설치해 주자.
// test.jest.ts
/**
* @jest-environment jsdom
*/
// 상단의 문법에 의해 jest는 jsdom 환경에서 실행되게 된다.
test('document test', () => {
console.log(document) // document
});