Je me rends compte que cette question a été posée à plusieurs reprises, mais toutes les solutions que j'ai trouvées ne semblent pas fonctionner pour moi. Je rencontre l'erreur suivante lorsque j'essaie d'exécuter des tests Jest pour une application Vue.
Jest encountered an unexpected token
This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.
By default, if Jest sees a Babel config, it will use that to transform your files, ignoring "node_modules".
Here's what you can do:
• To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
• If you need a custom transformation specify a "transform" option in your config.
• If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.
You'll find more details and examples of these config options in the docs:
https://facebook.github.io/jest/docs/en/configuration.html
Details:
/node_modules/vue-awesome/icons/expand.js:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import Icon from '../components/Icon.vue'
^^^^^^
SyntaxError: Unexpected token import
> 17 | import 'vue-awesome/icons/expand'
.babelrc:
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}]
],
"env": {
"test": {
"presets": [
["env", { "targets": { "node": "current" }}]
]
}
}
}
jest config dans package.json:
"jest": {
"moduleFileExtensions": [
"js",
"vue"
],
"moduleNameMapper": {
"^@/(.*)$": "<rootDir>/src/$1"
},
"transform": {
"^.+\\.js$": "<rootDir>/node_modules/babel-jest",
".*\\.(vue)$": "<rootDir>/node_modules/vue-jest"
},
"snapshotSerializers": [
"<rootDir>/node_modules/jest-serializer-vue"
],
"moduleDirectories": [
"node_modules",
"src"
]
}
Il semble que l'importation initiale dans le script du composant Vue en cours de montage pour le test fonctionne mais que l'importation dans le module lui-même (import Icon from '../components/Icon.vue
) ne soit pas reconnue.
Comment puis-je résoudre ça?
Vous devez juste vous assurer que vue-awesome
sera transformé par jest, alors ajoutez Après votre configuration de jest:
transformIgnorePatterns: ["/node_modules/(?!vue-awesome)"],
ce qui signifie: "Ignore tout dans node_modules à l'exception de vue-awesome
.
Voici également une liste exhaustive d’autres problèmes pouvant être à l’origine de cette erreur: https://github.com/facebook/jest/issues/2081
Si vous rencontrez ce problème après la mise à jour vers une version plus récente de Jest, essayez d'effacer le cache interne de Jest en exécutant:
jest --clearCache