web-dev-qa-db-fra.com

Configuration de Jest "SyntaxError: exportation inattendue de jetons"

J'implémente des tests dans un projet existant qui n'a actuellement aucun test. Mes tests ne parviennent pas à compiler node_modules/ importations.

/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)

La solution de contournement que j'ai trouvée consiste à "mettre sur liste blanche" node_modules dans la configuration jest package.json comme ceci:

"jest": {
    "transformIgnorePatterns": [
      "!node_modules/"
    ]
  }

Cela semble être un hack car il faut plus d'une minute pour exécuter un test simple qui importe node_modules/lodash-es/lodash.js.

Toute aide ou direction est appréciée, merci!

25
Cory Robinson

J'ai dû l'ajouter à mon .jestconfig:

"transformIgnorePatterns": [
  "<rootDir>/node_modules/(?!lodash-es)"
]
29
Yangshun Tay

Si aucune des solutions ci-dessus n'a fonctionné pour vous, vous pouvez l'essayer à votre guise

"moduleNameMapper": {
    "^lodash-es$": "lodash"
}

Il remplacera lodash-es avec la version commonjs lors du test du runtime.

15
OPatel

Poster une réponse plus complète ici:

Jest par défaut ne transforme pas node_modules car node_modules est énorme. La plupart des modules de nœuds sont empaquetés pour exposer le code ES5 car il est exécutable sans autre transformation (et largement rétrocompatible).

Dans votre cas, lodash-es expose spécifiquement les modules ES, qui devront être construits par Jest via babel.

Vous pouvez essayer de restreindre votre liste blanche afin que Jest n'essaye pas de passer tous les fichiers javascript dans node_modules via babel.

Je pense que la configuration correcte dans votre cas est:

"jest": {
  "transformIgnorePatterns": [
    "/!node_modules\\/lodash-es/"
  ]
}
14
Lewis Chung