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 parce que les promesses sont définies. Cependant, quand j'essaye de tester mon code avec Karma et PhantomJS, j'obtiens l'erreur Can't find variable: Promise.
. Je suppose que c'est parce que le navigateur PhantomJS ne supporte pas encore les promesses es6.
Comment puis-je configurer Karma pour introduire le polyfill pour des promesses?
5 réponses
vous pouvez tirer dans le Babel polyfill en installant simplement Babel Polyfill:
npm install --save-dev babel-polyfill
et ensuite inclure le fichier polyfill avant vos fichiers source et test dans le 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
],
a moins que vous ne sachiez que tous vos navigateurs cibles prennent en charge les promesses, vous voulez probablement appliquer ce polyfill à votre build libéré Aussi.
si vous vous sentez vraiment aventureux, vous pouvez utiliser Browserify pour extraire des fichiers vers rendez vos tests plus modulaires, puis utilisez Babelify pour transposer ES6 à ES5. J'ai créé un exemple de projet avec ceux - ci et un test de travail impliquant une promesse (tournant sur PhantomJS2) pour référence.
pour Babel 6, Nous avons besoin d'installer babel-polyfill
à l'appui de la promesse.
npm install --save-dev babel-polyfill
et ajouter une ligne dans karma.conf.js
dans le files
files: [
'node_modules/babel-polyfill/dist/polyfill.js',
....
]
c'est bien documenté dans https://github.com/babel/karma-babel-preprocessor#polyfill
Vous pouvez utiliser karma-babel-préprocesseur pour les fichiers qui utilisent des fonctionnalités ES6. L'installer avec
npm install --save-dev karma-babel-preprocessor
puis ajouter spécifier quels fichiers doivent être prétraitées vous karma.conf
:
preprocessors: {
"src/**/*.js": ["babel"],
"test/**/*.js": ["babel"]
},
comme l'a correctement souligné l'auteur, il n'est pas en mesure de reconnaître la promesse es6. Pour le charger, le module es6-promise peut être chargé à l'aide de webpack.Provedeplugin et sa configuration dans le tableau des plugins de webpack.
plugins: [
new webpack.ProvidePlugin({
'Promise': 'es6-promise'
})
]
Cela semble fonctionner pour moi!