我正在编写一个使用新的es6 promises的JavaScript库。在Firefox浏览器中可以测试该库,因为Promise已经被定义了。但是当我尝试使用Karma和PhantomJS测试我的代码时,会出现错误无法找到变量:Promise
。我猜想这是因为PhantomJS浏览器还不支持es6 promises。
我该如何配置Karma引入promise的polyfill呢?
我正在编写一个使用新的es6 promises的JavaScript库。在Firefox浏览器中可以测试该库,因为Promise已经被定义了。但是当我尝试使用Karma和PhantomJS测试我的代码时,会出现错误无法找到变量:Promise
。我猜想这是因为PhantomJS浏览器还不支持es6 promises。
我该如何配置Karma引入promise的polyfill呢?
您可以通过安装Babel Polyfill来引入Babel polyfill:
npm install --save-dev babel-polyfill
然后在karma.conf.js
的files
部分中,将多填充文件包含在您的源代码和测试文件之前:
files: [
'node_modules/babel-polyfill/dist/polyfill.js',
'index.js', //could be /src/**/*.js
'index.spec.js' //could be /test/**/*.spec.js
],
在 Babel 6 中,我们需要安装 babel-polyfill
来支持 Promise。
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有详细的文档记录。
正如作者所指出的那样,它无法识别ES6 Promise。为了加载它,可以借助Webpack.ProvidePlugin来加载ES6 Promise模块,并将其配置在Webpack的插件数组中。
plugins: [
new webpack.ProvidePlugin({
'Promise': 'es6-promise'
})
]
这对我来说似乎有效!
对于使用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 den Burger
$q.when(some_object)
。你真的需要在SO上开一个新问题,但是把链接发在这里,我会看一下。 - spikeheap