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?
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 .
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
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!
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"]
},