Javascript 业力、幻影和es6承诺

Javascript 业力、幻影和es6承诺,javascript,phantomjs,karma-runner,es6-promise,karma-mocha,Javascript,Phantomjs,Karma Runner,Es6 Promise,Karma Mocha,我正在编写一个使用新es6承诺的JavaScript库。我可以在Firefox中测试这个库,因为承诺已经定义。然而,当我试图用Karma和PhantomJS测试代码时,我得到了一个错误找不到变量:Promise.。我猜这是因为PhantomJS浏览器还不支持es6承诺 我如何配置因果报应来为承诺注入polyfill?这应该对你有所帮助。根据它,您似乎应该尝试将PhantomJS2与ES6结合使用。 你们也可以看看这个项目,它比你们的项目更接近主题 我希望它能对您有所帮助您只需安装以下装置即可安装

我正在编写一个使用新es6承诺的JavaScript库。我可以在Firefox中测试这个库,因为承诺已经定义。然而,当我试图用Karma和PhantomJS测试代码时,我得到了一个错误
找不到变量:Promise.
。我猜这是因为PhantomJS浏览器还不支持es6承诺

我如何配置因果报应来为承诺注入polyfill?

这应该对你有所帮助。根据它,您似乎应该尝试将PhantomJS2与ES6结合使用。 你们也可以看看这个项目,它比你们的项目更接近主题


我希望它能对您有所帮助

您只需安装以下装置即可安装Babel polyfill:

然后在
karma.conf.js
files
部分的源文件和测试文件之前包含polyfill文件:

files: [
  'node_modules/babel-polyfill/dist/polyfill.js',
  'index.js',   //could be /src/**/*.js
  'index.spec.js' //could be /test/**/*.spec.js
],
除非您知道您的所有目标浏览器都支持承诺,否则您可能也希望将此polyfill应用于您发布的构建

如果你真的很喜欢冒险,可以使用Browserify将文件拉入,使测试更加模块化,然后使用Babelify将ES6传输到ES5。我创建了一个。

可以用于使用ES6功能的文件。安装它与

npm安装--保存开发人员karma babel预处理器

然后添加并指定要预处理的文件
karma.conf

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

对于Babel 6,我们需要安装
Babel polyfill
以支持promise

npm install --save-dev babel-polyfill 这一点在美国有很好的记录

正如作者正确指出的,它不能承认es6承诺。为了加载es6 promise模块,可以借助webpack.ProvidePlugin加载,并在webpack的插件阵列中进行配置

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

这似乎对我有用

快速测试表明PhantomJS 2.0.1-dev不支持承诺。我有一个类似的问题,但在包含polyfill之后,承诺似乎永远无法解决,这里有一个要点:任何人都知道为什么承诺永远不会运行。然后“?@Chris您的问题没有考虑所有相关的问题。我没法说出你们的要点,但看起来你们的问题可能和角度有关。不要将Promise polyfill与Angular一起使用–您需要使用内置的$q实现(否则它将无法与摘要循环一起使用)。如果您想构建一个已解析的承诺,请使用
$q.when(某些对象)
。你真的需要在SO上打开一个新的问题,但是在这里发布链接,我会看一看。@spikeheap是的,我在整个应用程序中切换到$q,它工作了。感谢您查看。与babel一起使用,在karma.conf.js中有它的配置部分,以及
前处理器:{./tests/***.js',:['webpack']}
就足够了吗?当webpack在正常情况下添加polyfill时,我为什么还要手动添加它呢?嗨@Henrik,听起来你已经回答了自己的问题;)。这个问题/答案对于大量不使用Webpack的人很有用,但你是对的:如果你使用的系统已经为你进行了多边形填充,不要手动添加多边形填充。不幸的是,这不起作用。我已经在使用
babel预处理器
,Karma找不到
Promise.resolve()
函数。babel polyfill的
为我解决了这个问题。
files: [
  'node_modules/babel-polyfill/dist/polyfill.js',
  ....
]
plugins: [
        new webpack.ProvidePlugin({
            'Promise': 'es6-promise'
        })
    ]