이부분에서 최근 바뀐내용과 찾기 힘든 부분이 많아서 어려움을 많은 어려움을 겪었습니다. 제가 해결한 방법들을 설명해드리겠습니다.
npm i -D @testing-library/jest-dom @testing-library/react @types/jest babel-jest ts-jest
npm i -g -D jest
{
...
"script": {
"test": "jest"
}
}
npm run jest
명령어를 사용하면 됩니다.🔥하지만🔥
저는 이러한 에러를 마주했습니다 😂
그래서 우리가 할일은 🏄♂️
//jest.config.js
module.exports = {
moduleFileExtensions: ['js', 'json', 'jsx', 'ts', 'tsx', 'json'],
transform: {
'^.+\\.(js|jsx)?$': 'babel-jest',
'^.+\\.(ts|tsx)?$': 'ts-jest',
},
testEnvironment: 'jsdom',
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/$1',
},
testMatch: [
'<rootDir>/**/*.test.(js|jsx|ts|tsx)',
'<rootDir>/(tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx))',
],
transformIgnorePatterns: ['<rootDir>/node_modules/'],
};
jest.config.js
파일 내용입니다.처음 설치했던 것 중에 ts-jest
기억나시나요 ?
jest.config.js
안에 transform을 보면 정규식으로 '^.+\\.(ts|tsx)?$': 'ts-jest'
부분이 보이실겁니다.
눈치채셨겠지만 ts, tsx 파일을 필터링하고, ts-jest
를 통해 TypeScript에서 jest를 사용할 수 있도록 해줍니다.
앞서 npm으로 babel-jest
를 설치하였습니다.
jest.config.js
안에 transform을 보면 정규식으로 '^.+\\.(js|jsx)?$': 'babel-jest'
부분이 보이실겁니다.
이부분은 ES5 위의 문법들을 ES5로 바꿔주는 것인데 이 부분은 Babel의 설정이 이미 되어있다는 가정하에 적용할 수 있습니다.
우선 root directory에 .babel.config.jest
파일을 만듭니다.
다음으로 터미널에 npm i -D @babel/preset-typescript @babel/preset-env
명령어를 입력합니다.
//.babel.config.jest
{
"presets": ["@babel/preset-typescript", "@babel/preset-env"],
}
이 후에 위에 코드를 .babel.config.jest
에 입력해줍니다.
위에 코드를 간단히 설명하자면, Babel은 Plugin으로 돌아가는 도구입니다.
그렇다면 위에 presets은 무엇일까요? 바로 plugin들을 모아놓은 것입니다.
preset-env
는 JS문법을 ES5로 맞추기 위한 plugin들의 집합을 뜻하고, preset-typescript
는 TS -> JS를 위한 plugin들의 집합입니다.
위와 같은 설정이 끝났다면 이제 3번의 babel-jest
가 적용됩니다.
npm run test
를 진행하였을 떄도 같은 문제가 발생하시는 분이 있다면 적용해주면 됩니다.// package.json
{
...
"script": {
"test": "jest --config=jest.config.js"
}
}
이제 npm run test
를 해보시면 *.test.*와 같은 파일들이 잘 돌아가는 것을 확인할 수 있습니다 👊
제가 설정하는 곳에서 삽질을 많이 하다보니 결국 이렇게 설정까지 정리하게 되었네요... 🤦♂️
글이 길어져 사용법은 다음 3편에 정리해보겠습니다.
감사합니다 !
질문있습니다! 기존에 package.json에 있는 scripts 안에 있는 test 부분을 수정하는지요? 아니면 새로 "script": { "test": "jest"}, 라고 만들어야하나요!?