web-dev-qa-db-ja.com

Karma、PhantomJS、es6 Promises

私は、新しいes6 promiseを使用するJavaScriptライブラリを書いています。約束が定義されているため、Firefoxでライブラリをテストできます。ただし、KarmaとPhantomJSでコードをテストしようとすると、エラーCan't find variable: Promise.。これは、PhantomJSブラウザーがes6 promiseをまだサポートしていないためだと推測しています。

約束のポリフィルを取り込むようにKarmaを構成するにはどうすればよいですか?

37
Travis Parks

Babel Polyfill をインストールするだけで、Babelポリフィルを取り込むことができます。

npm install --save-dev babel-polyfill

そして、karma.conf.jsfilesセクション内のソースファイルとテストファイルの前にポリフィルファイルを含めます。

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で実行)を含む動作テストとこれらのサンプルプロジェクト を作成しました。

70
spikeheap

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 で十分に文書化されています

13
gasolin

著者によって正しく指摘されているように、es6 promiseを認識できません。ロードするには、webpack.ProvidePluginの助けを借りてes6-promiseモジュールをロードし、webpackのプラグイン配列内で設定します。

plugins: [
        new webpack.ProvidePlugin({
            'Promise': 'es6-promise'
        })
    ]

これは私のために働くようです!

1
MKant

これは thread に役立ちます。それによると、ES6でPhantomJS2を使用する必要があるようです。 this プロジェクトもご覧ください。これは、あなたよりも近くのテーマを扱っています。

私はそれがあなたを助けることを願っています

0
Tony

ES6機能を使用するファイルには karma-babel-preprocessor を使用できます。でインストールする

npm install --save-dev karma-babel-preprocessor

次に、前処理するファイルを指定しますkarma.conf

preprocessors: {
      "src/**/*.js": ["babel"],
      "test/**/*.js": ["babel"]
    },
0
SET