Jest 설정 "SyntaxError:예기치 않은 토큰 내보내기"
현재 테스트가 없는 기존 프로젝트에 테스트를 구현하고 있습니다.테스트가 컴파일되지 않습니다.node_modules/
Imports(수입.
/Users/me/myproject/node_modules/lodash-es/lodash.js:10
export { default as add } from './add.js';
^^^^^^
SyntaxError: Unexpected token export
at transformAndBuildScript (node_modules/jest-runtime/build/transform.js:320:12)
at Object.<anonymous> (app/reducers/kind_reducer.js:2:43)
at Object.<anonymous> (app/reducers/index.js:12:47)
제가 찾은 해결 방법은 '화이트리스트'입니다.node_modules
포장되어 있습니다.json jajest 설정은 다음과 같습니다.
"jest": {
"transformIgnorePatterns": [
"!node_modules/"
]
}
Import하는 간단한 테스트를 실행하는 데 1분 이상 걸리기 때문에 이것은 해킹처럼 보입니다.node_modules/lodash-es/lodash.js
.
다른 해결 방법이 효과가 없는 경우 농담으로 시도해 보십시오.
"moduleNameMapper": {
"^lodash-es$": "lodash"
}
대체하다lodash-es
실행 시 commonjs 버전을 사용합니다.
저는 이걸 제 거에 넣어야 했어요..jestconfig
:
"transformIgnorePatterns": [
"<rootDir>/node_modules/(?!lodash-es)"
]
자세한 답변은 이쪽:
기본적으로는 Jaye는 변환되지 않습니다.node_modules
왜냐면node_modules
엄청 커요.대부분의 노드 모듈은 ES5 코드를 공개하도록 패키지화되어 있습니다.이는 추가 변환 없이 실행할 수 있기 때문입니다(대부분 역호환 가능).
당신의 경우,lodash-es
특히 ES 모듈을 공개합니다.제스트에 의해 babel을 통해 구축될 필요가 있습니다.
화이트리스트를 좁혀서 Jest가 모든 JavaScript 파일을 넘겨주지 않도록 할 수 있습니다.node_modules
바벨을 통해서.
이 경우 올바른 구성은 다음과 같습니다.
"jest": {
"transformIgnorePatterns": [
"/!node_modules\\/lodash-es/"
]
}
위해서create-react-app
수정책을 찾고 있는 유저에게는 다음과 같은 이점이 있습니다.
// package.json
...
"jest": {
"transformIgnorePatterns": [
"<rootDir>/node_modules/(?!lodash-es)"
]
},
...
의 옵션 덮어쓰기jest.config.js
파일이 안 먹혔어요모든 옵션을 덮어쓸 수 있는 것은 아닙니다.지원되는 옵션 목록은https://create-react-app.dev/docs/running-tests#configuration 입니다.
아마 누군가는 이것이 유용하다고 생각할 것이다.
제 경우 Angular 어플리케이션이 있는데lodash-es
패키지.테스트 중에 작성자와 같은 오류가 발생하였습니다.
OPatel의 답변은 약간의 수정과 함께 나에게 잘 작동했습니다(당신의 답변에 추가해 주세요.jest.config.ts
):
"moduleNameMapper": {
"lodash-es": "lodash"
}
변경 후 추가도 필요했습니다."esModuleInterop": true
내 안에tsconfig.spec.json
의 범위 내에서compilerOptions
폐기하는 성질TypeError: cloneDeep_1.default is not a function
.
갱신:
위의 모든 Lodash 메서드가 끝나면 실제 값이 아닌 LodashWrapper가 반환됩니다.
const clone = cloneDeep(object); // LodashWrapper
이 문제를 해결하기 위해 다음 솔루션을 사용했습니다.https://github.com/nrwl/nx/issues/812#issuecomment-787141835
moduleNameMapper: {
"^lodash-es/(.*)$": "<rootDir>/node_modules/lodash/$1",
}
이름 바꾸기.babelrc
로.babel.config.js
추가transformIgnorePatterns
날 위해 일했어
module.exports = {
"presets": ["@babel/preset-env"]
}
P.S. My Jest 버전은 다음과 같습니다.
"jest": "24.9.0"
Babel-jest는 Babel 7을 사용할 때 node_modules에서 Import/export를 변환하지 않습니다.
저는 pnpm을 사용하기 때문에 패턴의 심볼링크를 설명해야 했습니다.
transformIgnorePatterns: ['/node_modules/.pnpm/(?!lodash-es)']
언급URL : https://stackoverflow.com/questions/42260218/jest-setup-syntaxerror-unexpected-token-export
'programing' 카테고리의 다른 글
AngularJS: ng-click은 "좋은 관행"입니까?AngularJS에 ng-{event}가 없는 이유는 무엇입니까? (0) | 2023.03.26 |
---|---|
굴삭기를 이용한 조롱과 그루터기 (0) | 2023.03.26 |
Yoman for Angular 그러면 Grunt serv가 안 돼 (0) | 2023.03.26 |
리액트 컴포넌트를 동적으로 작성하다 (0) | 2023.03.26 |
스프링 부트 실행 시 IntelliJ 프로세스가 종료 코드 0으로 종료됨 (0) | 2023.03.26 |