私は、新しいes6 promiseを使用するJavaScriptライブラリを書いています。約束が定義されているため、Firefoxでライブラリをテストできます。ただし、KarmaとPhantomJSでコードをテストしようとすると、エラーCan't find variable: Promise.
。これは、PhantomJSブラウザーがes6 promiseをまだサポートしていないためだと推測しています。
約束のポリフィルを取り込むようにKarmaを構成するにはどうすればよいですか?
Babel Polyfill をインストールするだけで、Babelポリフィルを取り込むことができます。
npm install --save-dev babel-polyfill
そして、karma.conf.js
のfiles
セクション内のソースファイルとテストファイルの前にポリフィルファイルを含めます。
files: [
'node_modules/babel-polyfill/dist/polyfill.js',
'index.js', //could be /src/**/*.js
'index.spec.js' //could be /test/**/*.spec.js
],
すべてのターゲットブラウザーがPromiseをサポートしていることがわかっていない限り、おそらくこのポリフィルをリリース済みビルドにも適用する必要があります。
本当に冒険したい場合は、Browserifyを使用してファイルをプルし、テストをよりモジュール化してから、Babelifyを使用してES6をES5に変換できます。 参照用のPromise(PhantomJS2で実行)を含む動作テストとこれらのサンプルプロジェクト を作成しました。
Babel 6では、promiseをサポートするためにbabel-polyfill
をインストールする必要があります。
npm install --save-dev babel-polyfill
files
セクション内のkarma.conf.js
に行を追加します
files: [
'node_modules/babel-polyfill/dist/polyfill.js',
....
]
https://github.com/babel/karma-babel-preprocessor#polyfill で十分に文書化されています
著者によって正しく指摘されているように、es6 promiseを認識できません。ロードするには、webpack.ProvidePluginの助けを借りてes6-promiseモジュールをロードし、webpackのプラグイン配列内で設定します。
plugins: [
new webpack.ProvidePlugin({
'Promise': 'es6-promise'
})
]
これは私のために働くようです!
ES6機能を使用するファイルには karma-babel-preprocessor を使用できます。でインストールする
npm install --save-dev karma-babel-preprocessor
次に、前処理するファイルを指定しますkarma.conf
:
preprocessors: {
"src/**/*.js": ["babel"],
"test/**/*.js": ["babel"]
},