web-dev-qa-db-fra.com

Karma, PhantomJS et es6 Promises

J'écris une bibliothèque JavaScript qui utilise les nouvelles promesses es6. Je peux tester la bibliothèque dans Firefox car les promesses sont définies. Cependant, lorsque j'essaie de tester mon code avec Karma et PhantomJS, l'erreur Can't find variable: Promise. s'affiche. Je suppose que c'est parce que le navigateur PhantomJS ne prend pas encore en charge les promesses es6.

Comment puis-je configurer Karma pour intégrer le polyfill à des promesses?

36
Travis Parks

Vous pouvez insérer le Polyfill Babel simplement en installant Babel Polyfill :

npm install --save-dev babel-polyfill

puis incluez le fichier polyfill avant vos fichiers source et de test dans la section files de votre karma.conf.js:

files: [
  'node_modules/babel-polyfill/dist/polyfill.js',
  'index.js',   //could be /src/**/*.js
  'index.spec.js' //could be /test/**/*.spec.js
],

À moins que vous ne sachiez que tous vos navigateurs cibles prennent en charge Promises, vous voudrez probablement également appliquer ce polyfill à votre version publiée.

Si vous vous sentez vraiment aventurier, vous pouvez utiliser Browserify pour extraire des fichiers afin de rendre vos tests plus modulaires, puis utiliser Babelify pour transpiler ES6 à ES5. J'ai créé un exemple de projet avec ceux-ci et un test de travail impliquant une promesse (s'exécutant sur PhantomJS2) comme référence .

68
spikeheap

Pour Babel 6, nous avons besoin de l’installation babel-polyfill pour prendre en charge la promesse.

 npm installer --save-dev babel-polyfill 

et ajoutez une ligne dans karma.conf.js dans la section files

files: [
  'node_modules/babel-polyfill/dist/polyfill.js',
  ....
]

C'est bien documenté dans https://github.com/babel/karma-babel-preprocessor#polyfill

13
gasolin

Ce thread devrait vous aider. Selon lui, il semble que vous devriez essayer d’utiliser PhantomJS2 avec ES6 . Vous pouvez aussi jeter un coup d’œil à this projet, qui traite du sujet plus proche que le vôtre.

J'espère que cela peut vous aider

0
Tony

comme l'a souligné à juste titre l'auteur, il n'est pas en mesure de reconnaître es6 promesse. Pour le charger, le module es6-promise peut être chargé à l'aide de webpack.ProvidePlugin et configuré à l'intérieur du tableau de plugins de webpack.

plugins: [
        new webpack.ProvidePlugin({
            'Promise': 'es6-promise'
        })
    ]

Cela semble fonctionner pour moi!

0
MKant

Vous pouvez utiliser karma-babel-preprocessor pour les fichiers utilisant les fonctionnalités de ES6. Installez-le avec 

npm install --save-dev karma-babel-preprocessor

puis ajoutez spécifier quels fichiers doivent être prétraités karma.conf:

preprocessors: {
      "src/**/*.js": ["babel"],
      "test/**/*.js": ["babel"]
    },
0
SET