Estoy escribiendo una biblioteca de JavaScript que usa las nuevas promesas de es6. Puedo probar la biblioteca en Firefox porque las promesas están definidas. Sin embargo, cuando trato de probar mi código con Karma y PhantomJS, aparece el error Can't find variable: Promise. . Supongo que esto se debe a que el navegador PhantomJS aún no es compatible con las promesas de es6.
¿Cómo puedo configurar Karma para traer el polyfill para promesas?
Puede extraer el polyfill de Babel simplemente instalando Babel Polyfill :
npm install --save-dev babel-polyfill y luego incluya el archivo polyfill antes de su fuente y pruebe los archivos dentro de la sección de files de su 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 menos que sepa que todos sus navegadores de destino son compatibles con Promises, probablemente también desee aplicar este polyfill a su compilación publicada.
Si se siente realmente aventurero, puede usar Browserify para extraer archivos para que sus pruebas sean más modulares y luego usar Babelify para transpilar ES6 a ES5. Creé un proyecto de muestra con estos y una prueba de trabajo que involucra una Promesa (que se ejecuta en PhantomJS2) como referencia .
Para Babel 6, necesitamos instalar babel-polyfill para respaldar la promesa.
npm install --save-dev babel-polyfill
y agregue una línea en karma.conf.js dentro de la sección de files
files: [ 'node_modules/babel-polyfill/dist/polyfill.js', .... ]Está bien documentado en https://github.com/babel/karma-babel-preprocessor#polyfill
como correctamente señaló el autor, no es capaz de reconocer la promesa de es6. Para cargarlo, el módulo es6-promise se puede cargar con la ayuda de webpack.ProvidePlugin y configurarlo dentro de la matriz de complementos de webpack.
plugins: [ new webpack.ProvidePlugin({ 'Promise': 'es6-promise' }) ]¡Esto parece funcionar para mí!