babel-jest ne gère pas les ES6 dans des modules
Je suis en train de mettre en place Plaisanterie sur un Réagir en fonction du projet qui utilise ES6 modules. Cependant il me semble avoir des problèmes avec ES6 modules, je suis à l'aide de babel-jest et je crois que j'ai configuré correctement (Jest détecte automatiquement).
Plaisanterie ne semble pas avoir de problème d'utilisation de ES6 importations toutefois, dès qu'il frappe sur une instruction import dans l'un des modules importés, il étouffe. C'est comme si il n'est transpiling le test initial de script, et non sur les modules importés. J'ai essayé différentes configurations et essayé de chercher sur Google avec pas de chance. L'exécution des tests sans les importations fonctionne très bien.
Voici l'erreur:
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import Predications from './predications';
^^^^^^
SyntaxError: Unexpected token import
Voici les bits de config:
plaisanterie.conf.json
{
"testRegex": "\/test\/spec\/.*\\.js$",
}
.babelrc
{
"presets": ["es2015", "stage-0", "react"]
}
Script de Test
import React from 'react';
import { mount, shallow } from 'enzyme';
import Slider from 'react-slick';
import Carousel from '../../client/components/carousel/carousel.js'; //test chokes on when I include this module
describe('carousel component', () => {
it('is a test test case', () => {
expect(1 + 2).toEqual(3);
});
});
Mise à jour:
Comme suggéré, j'ai essayé de lancer le test sans jest.conf.js cependant la testRegex est nécessaire à la Plaisanterie à trouver mes tests, j'ai essayé les tests de mouvement par défaut du répertoire de test et qu'ils ne parviennent toujours pas.
Je tiens à préciser que les tests eux-mêmes sont en cours d'exécution fine, la question semble être l'endroit où l'un de mes modules importés utilise ES6, dans mon exemple ci-dessus, si je n'ai pas importer mes carrousel composant le test se passe bien, dès que je l'importation que le test des bobines sur l'instruction d'importation à l'intérieur du fichier. Il semble que les modules importés ne sont pas arriver transpiled.
Mise à jour #2
Après quelques recherches, il semble que le problème est que babel n'est pas transpiling ES6 dans node_modules. J'ai créé un exemple de repo pour le démontrer ici: https://github.com/jamiedust/babel-jest-example
Je comprends que les modules tiers devrait être la manipulation de leurs propres transpiling, cependant, nous avons un certain nombre de modules qui sont hébergés sur nos propres mnp de registre et sont ré-utilisés entre les projets, dans ces cas Webpack poignées transpiling, pour la Plaisanterie tests, nous avons besoin de ces node_modules être transpiled par Babel, ou une façon de tirer parti de notre webpack mis en place pour le faire pour nous.
Solution
Ajouter la configuration suivante dans le paquet.json (ou Plaisanterie fichier de config).
"jest": {
"transformIgnorePatterns": [
"/node_modules/(?!test-component).+\\.js$"
]
}
- Ce qui se passe lorsque vous retirez le
transform
partie forme la plaisanterie réglage. Ce n'est pas nécessaire dans les cas simples. - Je reçois la même erreur, oui votre droit, je ne semble pas en avoir besoin
- avez-vous essayé de courir sans
jest.conf.js
? Il devrait fonctionner w/o configuration supplémentaire - Je soupçonne
textRegex
et/outransform
sont à l'origine de la question - comme vous pouvez le vérifier ici github.com/MinimalNoise/persist-lead-service, les tests passent parfaitement sur
es-modules
(même s'il n'jsx) sansjest
de configuration - Je vais essayer sans le jest.conf.js plus tard, cependant, j'aurais été en clair, les tests fonctionnent bien si je ne suis pas d'importer des modules
- Oui, mais vous ne voulez pas utiliser de CommonJS juste pour faire des tests de travail de droit? facebook.github.io/plaisanterie/docs/getting-started.html#à l'aide de la tour de babel Comme vous pouvez le voir ici, il n'y a aucune configuration supplémentaire dont vous aurez besoin.
babel-polyfill
est nécessaire de faire (entre autres) des générateurs de travail babeljs.io/docs/utilisation/polyfill mais pas moyen nécessaire pour ES Modules - comme je comprends la Plaisanterie ne nécessitent CommonJS, voir la section sur les Webpack 2 ici: facebook.github.io/plaisanterie/docs/webpack.html#contenu. Cependant mon programme d'installation doit être la compilation de commonjs modules et donc ne devrait pas être un problème. Merci pour vos suggestions, mais malheureusement ils n'ont pas aidé (voir ma mise à jour en question).
- Toutes mes excuses pour être tranquille j'ai été assez occupé, mais je suis de prendre ceci en arrière jusqu'à maintenant. Consultez la mise à jour #2 dans ma question initiale, merci.
Vous devez vous connecter pour publier un commentaire.
Par défaut le code
node_modules
est ignoré parbabel-jest
, voir la Plaisanterie option de configurationtransformIgnorePatterns
. J'ai également créé un PR sur votre exemple repo, de sorte que vous pouvez le constater.Alors que cela fonctionne, je l'ai trouvé extrêmement lent dans les applications réelles qui ont beaucoup de dépendances contenant ES modules. La Plaisanterie codebase a une approche légèrement différente de ce que vous pouvez trouver dans "babel-jest transformer les dépendances" (désolé, ne me permet pas de poster plus de 2 URLs). Cela peut également prendre beaucoup plus de temps sur Windows, voir "la Prise de 10 secondes sur une zone vide repo".
Si "l'unité" de test, en se moquant est probablement la meilleure façon d'aller.
Vous pourriez essayer d'ajouter le transformer-es2015-modules-commonjs plugin pour votre babel fichier de configuration à des fins de test. Voici un exemple de fichier de configuration qui indique babel à transpile modules que lorsque, dans un environnement de test. Vous pouvez le mettre en dessous de vos presets:
Vous pouvez lire à ce sujet le plugin ici:
https://www.npmjs.com/package/babel-plugin-transform-es2015-modules-commonjs
Ensuite, lors de l'exécution de votre Plaisanterie tests sur la ligne de commande spécifiez NODE_ENV=test (vous pouvez avoir besoin d'ajouter l'option --no-cache drapeau de la commande pour la première fois après le changement de la babel config car Jest caches babel de sortie, mais après cela, vous pouvez la laisser de côté:
J'ai appris sur ce problème dans une Réagir séminaire par Brian Holt au Frontend Maîtres. https://frontendmasters.com/courses/
J'ai connu le même problème (node_module pas transpiled par babel-jest), sans pouvoir le résoudre.
Au lieu de cela, j'ai enfin réussir à se moquer de la node_module, comme décrit ici https://facebook.github.io/jest/docs/manual-mocks.html
NB: le réglage se moque dans
__mocks__
les sous-dossiers ne fonctionne pas pour moi. J'ai donc passé la fantaisie comme deuxième paramètre de lajest.mock()
fonction. Quelque chose comme :Une autre cause possible. Babel ignore désormais votre .babelrc à l'intérieur de node_modules et utilise celui fourni par la dépendance. Si vous avez le contrôle de la dépendance que vous devrez ajouter un .babelrc et babel serait d'utiliser ces paramètres pour cela.
cela peut causer des problèmes si votre dépendance et de votre projet de l'utilisation de différents babel versions ou de modules.