Karma,PhantomJS和es6 Promises

时间:2015-04-01 12:40:55

标签: javascript phantomjs karma-runner es6-promise karma-mocha

我正在编写一个使用新es6承诺的JavaScript库。我可以在Firefox中测试库,因为已经定义了promises。但是,当我尝试使用Karma和PhantomJS测试我的代码时,我收到错误Can't find variable: Promise.。我猜这是因为PhantomJS浏览器还没有支持es6的承诺。

如何配置Karma为承诺引入polyfill?

5 个答案:

答案 0 :(得分:70)

只需安装Babel Polyfill

即可拉入Babel polyfill
npm 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)

thread应该可以帮到你。根据它,你似乎应该尝试使用PhantomJS2和ES6。 您还可以查看this项目,该项目对待的是一个比您更近的主题。

我希望它可以帮到你

答案 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'
        })
    ]

这似乎对我有用!