Si j'utilise import/export
depuis ES6, tous mes tests de plaisanterie échouent avec l'erreur:
Mot réservé inattendu
Je convertis mon objet sous test pour qu'il utilise la syntaxe ancienne école IIFY et, tout à coup, mes tests réussissent. Ou encore, prenons un cas de test encore plus simple:
var Validation = require('../src/components/validation/validation');//PASS
//import * as Validation from '../src/components/validation/validation'//FAIL
Même erreur. De toute évidence, il y a un problème d'importation/exportation ici. Il n'est pas pratique pour moi de réécrire mon code en utilisant la syntaxe ES5 uniquement pour rendre mon framework de test heureux.
J'ai babel-jest. J'ai essayé diverses suggestions des problèmes de github. Non, pas aller si loin.
"scripts": {
"start": "webpack-dev-server",
"test": "jest"
},
"jest": {
"testPathDirs": [
"__tests__"
],
"testPathIgnorePatterns": [
"/node_modules/"
],
"testFileExtensions": ["es6", "js"],
"moduleFileExtensions": ["js", "json", "es6"]
},
{
"presets": ["es2015", "react"],
"plugins": ["transform-decorators-legacy"]
}
Y at-il un correctif pour cela?
Il suffit d'ajouter l'étape 0 à votre fichier .babelrc. Voici un exemple:
{
"presets": ["es2015", "react", "stage-0"],
"plugins": ["transform-decorators-legacy"]
}
De ma réponse sur une autre question, cela peut être plus simple:
La seule exigence est de configurer votre environnement test
avec Babel et d'ajouter le plug-in es2015 transform:
Étape 1:
Ajoutez votre environnement test
à .babelrc
à la racine de votre projet:
{
"env": {
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
}
Étape 2:
Installez le plugin de transformation es2015:
npm install --save-dev babel-plugin-transform-es2015-modules-commonjs
Et c'est tout. Jest activera automatiquement la compilation de modules ES vers CommonJS, sans avoir à renseigner les options supplémentaires de votre propriété jest
à l'intérieur de package.json
.
En plus d'installer babel-jest
(qui est livré avec jest par défaut maintenant), veillez à installer regenerator-runtime
.