programing

Jest 설정 "SyntaxError:예기치 않은 토큰 내보내기"

showcode 2023. 3. 26. 11:57
반응형

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

반응형