我正在编写一个使用新es6承诺的JavaScript库。我可以在Firefox中测试库,因为已经定义了promises。但是,当我尝试使用Karma和PhantomJS测试我的代码时,我收到错误Can't find variable: Promise.
。我猜这是因为PhantomJS浏览器还没有支持es6的承诺。
如何配置Karma为承诺引入polyfill?
答案 0 :(得分:70)
只需安装Babel Polyfill:
即可拉入Babel polyfillnpm install --save-dev babel-polyfill
然后在您files
的{{1}}部分中的源文件和测试文件之前包含polyfill文件:
karma.conf.js
除非您知道所有目标浏览器都支持Promise,否则您可能也希望将此polyfill应用于已发布的版本。
如果你真的有冒险精神,你可以使用Browserify来提取文件,使你的测试更加模块化,然后使用Babelify将ES6转换为ES5。我创建了sample project with these and a working test involving a Promise (running on PhantomJS2) for reference。
答案 1 :(得分:13)
对于Babel 6,我们需要安装babel-polyfill
来支持承诺。
npm install --save-dev babel-polyfill
并在karma.conf.js
部分的files
内添加一行
files: [
'node_modules/babel-polyfill/dist/polyfill.js',
....
]
它有很好的记录 https://github.com/babel/karma-babel-preprocessor#polyfill
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以将karma-babel-preprocessor用于使用ES6功能的文件。用
安装 npm install --save-dev karma-babel-preprocessor
然后添加指定应该预处理哪些文件karma.conf
:
preprocessors: {
"src/**/*.js": ["babel"],
"test/**/*.js": ["babel"]
},
答案 4 :(得分:0)
正如作者正确指出的那样,它无法识别es6的承诺。为了加载它,可以在webpack.ProvidePlugin的帮助下加载es6-promise模块,并在webpack的plugins数组中进行配置。
plugins: [
new webpack.ProvidePlugin({
'Promise': 'es6-promise'
})
]
这似乎对我有用!