2015-04-01 86 views
32

我在寫一個使用新的es6 promise的JavaScript庫。我可以在Firefox中測試庫,因爲承諾是定義的。但是,當我嘗試使用Karma和PhantomJS測試我的代碼時,出現錯誤Can't find variable: Promise.。我猜這是因爲PhantomJS瀏覽器還不支持es6承諾。Karma,PhantomJS和es6 Promises

我如何配置Karma爲承諾引入polyfill?

回答

0

This thread should help you。據它說,你似乎應該嘗試與ES6一起使用PhantomJS2。 您也可以看看this項目,該項目對待比您的近的主題。

我希望它可以幫助你

+3

快速測試顯示PhantomJS 2.0.1-dev不支持Promises。 – 2015-04-01 12:59:20

63

您可以在通天填充工具拉,只需安裝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

+0

我有一個類似的問題,但包括polyfill後,承諾似乎永遠不會解決,這是一個要點:https://gist.github.com/Kikketer/1646eccdaff76944b358任何人都有一個線索,爲什麼承諾永遠不會運行' 。然後' ? – Chris 2016-02-19 17:47:46

+0

@Chris你的問題沒有看全部相關。我無法運行你的要點,但看起來你的問題可能與Angular有關。不要將Promise polyfill與Angular一起使用 - 您需要使用內置的$ q實現(否則它不適用於摘要循環)。如果你想用'$ q.when(some_object)'來構建一個已解決的promise。你真的需要在SO上打開一個新的問題,但在這裏發佈鏈接,我會看看。 – spikeheap 2016-02-20 18:44:49

+0

@spikeheap是的我在整個應用程序切換到$ q,它的工作。感謝您的關注。 – Chris 2016-02-21 22:05:01

0

對於使用ES6功能的文件,您可以使用karma-babel-preprocessor。與

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

安裝它,然後添加指定哪些文件應該進行預處理你karma.conf

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

不幸的是,這不起作用。我已經使用'babel-preprocessor',Karma找不到'Promise.resolve()'函數。 'babel-polyfill'爲我解決了這個問題。 – Jelle 2017-01-19 13:35:09

0

爲正確的作者是不能夠識別器ES6承諾指出。爲了加載它,es6-promise模塊可以在webpack.ProvidePlugin的幫助下加載並在webpack的插件數組中進行配置。

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

這似乎適合我!