我在写一个使用新的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