

내 터미널에 나온 에러를 다시 만들어 내지 못해서
나와 같은 에러를 만난 사람의 터미널 사진을 가져왔다.
Jest관련 인강 실습 도중 만난 에러인데
axios를import할 수 없다는 에러이다.
인강에서 제공해준 소스 코드에서
package.json을 열어본 결과,인강에서 사용한
axios버전은0.21.4이고
내가 사용한axios버전은1.4.0이다.
인강
내 코드
axios버전이 크게 다름을 알 수 있는데
0.x 버전에서는CommonJS 방식이었는데
1.x 버전부터ECMAScript 문법을 따르는 모듈로 변경되었다고 한다.
Jest는nodejs환경에서 동작하기 때문에CommonJS방식으로 모듈을 사용한다.
Jest에서node_modules폴더는 기본적으로 변경 대상에서 제외한다.
https://jestjs.io/docs/27.x/configuration#transformignorepatterns-arraystring
Jest는바벨같은 트랜스파일러를 통해
ECMAScript 모듈을CommponJS 문법에 맞도록 변경 후 사용해야 한다.
Jest는nodejs환경에서 동작하므로CommonJS방식으로 동작한다.
axios의 사용 방식이CommonJS(require) 방식에서 ECMAScript(import) 모듈 방식로 변경되었다.
Jest는바벨같은 트랜스파일러를 통해
ECMAScript 모듈을 CommponJS 문법에 맞도록 변경 후 사용해야 한다.
nodejs는CommonJS방식을 사용한다.
1.x 버전의 axios는 ECMAScript 를 사용한다.따라서
ECMAScript를 CommonJS 방식으로 쓸 수 있도록 트랜스파일링을 적용해야한다.
"type": "module"
type프로퍼티를"module"로 설정한다.
package.json파일에 있는 설정으로,
이 설정이 있으면nodejs는 해당 패키지의.js 파일을 ECMAScript 모듈으로 취급한다.또한 이 설정이 있는 경우에는,
CommonJS 모듈을 사용하려면파일 확장자를 .cjs로 지정해야 한다.
type의 기본값은"commonJS"이다.
"type": "commonjs"가 설정되어 있고ES 모듈을 사용하려면 .mjs 확장자를 사용해야 한다.
바벨 변경 대상 지정
바벨 프리셋(preset) 지정
package.json에서 설정한다.
package.json에 아래 구문을 추가한다.
Jest가 "axios" 모듈을 해석할 때 대신
"axios/dist/node/axios.cjs"파일을 사용하도록 지정 한다.이는
axios모듈의 특정 버전이Jest테스트 환경과 호환되지 않는 경우에 유용하다.
여기서는axios모듈의CommonJS 버전을 직접 지정하여Jest가 이 파일을 사용하도록 한다."jest": { "moduleNameMapper": { "axios": "axios/dist/node/axios.cjs" } }
package.json에 아래 구문을 추가한다.
/node_modules/디렉토리에 있는 파일을 변환하지 않지만,
이 설정으로 인해axios모듈은 예외로 두고 변환하게 된다.이는
axios가ES6 모듈을 사용하고 있으며,
Jest가 이를 이해하기 위해 변환이 필요한 경우에 유용합니다."jest": { "transformIgnorePatterns": [ "node_modules/(?!axios)" ] }
{ ... "type": "module", // 추가 ... "jest": { // 추가 "transformIgnorePatterns": [ "node_modules/(?!axios)" ]
{ ... "type": "module", // 추가 ... "jest": { // 추가 "moduleNameMapper": { "axios": "axios/dist/node/axios.cjs" } }