Karma, PhantomJS и es6 Promises
Я пишу библиотеку JavaScript, которая использует новый es6 promises. Я могу протестировать библиотеку в Firefox, потому что promises определены. Однако, когда я пытаюсь проверить свой код с помощью Karma и PhantomJS, я получаю сообщение об ошибке Can't find variable: Promise.
. Я предполагаю, что это потому, что браузер PhantomJS не поддерживает es6 promises.
Как настроить Karma для ввода polyfill для promises?
Ответы
Ответ 1
Вы можете вытащить Babel polyfill, просто установив Babel Polyfill:
npm install --save-dev babel-polyfill
а затем добавьте файл polyfill перед исходным кодом и проверьте файлы в разделе files
вашего 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
],
Если вы не знаете, что все целевые браузеры поддерживают Promises, вы, вероятно, захотите применить этот polyfill к своей выпущенной версии тоже.
Если вы чувствуете себя очень предприимчивым, вы можете использовать Browserify, чтобы вытащить файлы, чтобы сделать ваше тестирование более модульным, а затем использовать Babelify для пересылки ES6 на ES5. Я создал проект с этими и рабочим тестом с использованием Promise (работает на PhantomJS2) для справки.
Ответ 2
Для Babel 6 нам нужно установить babel-polyfill
, чтобы поддержать обещание.
npm install --save-dev babel-polyfill
и добавьте строку в karma.conf.js
в разделе files
files: [
'node_modules/babel-polyfill/dist/polyfill.js',
....
]
Это хорошо документировано в
https://github.com/babel/karma-babel-preprocessor#polyfill
Ответ 3
Этот должен помочь вам. По его мнению, вам стоит попробовать использовать PhantomJS2 с ES6.
Вы также можете взглянуть на этот проект, который относится к ближнему, чем ваш.
Надеюсь, это поможет вам.
Ответ 4
Вы можете использовать karma-babel-preprocessor для файлов, которые используют функции ES6. Установите его с помощью
npm install --save-dev karma-babel-preprocessor
а затем укажите, какие файлы должны быть предварительно обработаны вами karma.conf
:
preprocessors: {
"src/**/*.js": ["babel"],
"test/**/*.js": ["babel"]
},
Ответ 5
как правильно указал автор, он не может признать обещание es6. Чтобы загрузить его, модуль es6-prom можно загрузить с помощью webpack.ProvidePlugin и настроить его внутри массива плагинов webpack.
plugins: [
new webpack.ProvidePlugin({
'Promise': 'es6-promise'
})
]
Кажется, это работает для меня!