我在寫一個使用新的es6 promise的JavaScript庫。我可以在Firefox中測試庫,因爲承諾是定義的。但是,當我嘗試使用Karma和PhantomJS測試我的代碼時,出現錯誤Can't find variable: Promise.
。我猜這是因爲PhantomJS瀏覽器還不支持es6承諾。Karma,PhantomJS和es6 Promises
我如何配置Karma爲承諾引入polyfill?
我在寫一個使用新的es6 promise的JavaScript庫。我可以在Firefox中測試庫,因爲承諾是定義的。但是,當我嘗試使用Karma和PhantomJS測試我的代碼時,出現錯誤Can't find variable: Promise.
。我猜這是因爲PhantomJS瀏覽器還不支持es6承諾。Karma,PhantomJS和es6 Promises
我如何配置Karma爲承諾引入polyfill?
您可以在通天填充工具拉,只需安裝Babel Polyfill:
npm install --save-dev babel-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
],
除非您知道所有目標瀏覽器都支持Promi ses,你可能也想把這個polyfill應用到你發佈的版本上。
如果您感覺真的很冒險,可以使用Browserify將文件拉入以使測試更加模塊化,然後使用Babelify將ES6轉換爲ES5。我創建了一個sample project with these and a working test involving a Promise (running on PhantomJS2) for reference。
我有一個類似的問題,但包括polyfill後,承諾似乎永遠不會解決,這是一個要點:https://gist.github.com/Kikketer/1646eccdaff76944b358任何人都有一個線索,爲什麼承諾永遠不會運行' 。然後' ? – Chris 2016-02-19 17:47:46
@Chris你的問題沒有看全部相關。我無法運行你的要點,但看起來你的問題可能與Angular有關。不要將Promise polyfill與Angular一起使用 - 您需要使用內置的$ q實現(否則它不適用於摘要循環)。如果你想用'$ q.when(some_object)'來構建一個已解決的promise。你真的需要在SO上打開一個新的問題,但在這裏發佈鏈接,我會看看。 – spikeheap 2016-02-20 18:44:49
@spikeheap是的我在整個應用程序切換到$ q,它的工作。感謝您的關注。 – Chris 2016-02-21 22:05:01
對於使用ES6功能的文件,您可以使用karma-babel-preprocessor。與
npm install --save-dev karma-babel-preprocessor
安裝它,然後添加指定哪些文件應該進行預處理你karma.conf
:
preprocessors: {
"src/**/*.js": ["babel"],
"test/**/*.js": ["babel"]
},
不幸的是,這不起作用。我已經使用'babel-preprocessor',Karma找不到'Promise.resolve()'函數。 'babel-polyfill'爲我解決了這個問題。 – Jelle 2017-01-19 13:35:09
對於巴貝爾6,我們需要安裝babel-polyfill
支持的承諾。
npm install --save-dev babel-polyfill
和files
部分
files: [
'node_modules/babel-polyfill/dist/polyfill.js',
....
]
它是有據可查的內加入karma.conf.js
一行在 https://github.com/babel/karma-babel-preprocessor#polyfill
爲正確的作者是不能夠識別器ES6承諾指出。爲了加載它,es6-promise模塊可以在webpack.ProvidePlugin的幫助下加載並在webpack的插件數組中進行配置。
plugins: [
new webpack.ProvidePlugin({
'Promise': 'es6-promise'
})
]
這似乎適合我!
快速測試顯示PhantomJS 2.0.1-dev不支持Promises。 – 2015-04-01 12:59:20