Mocha为ES6对象扩散操作符抛出意外的令牌错误



当我运行mocha时,如果我在应用程序中使用对象排列运算符,它会突然中断并出现Unexpected token错误

SyntaxError: ../app/middleware/api.js: Unexpected token (30:13)
  28 |
  29 |   // Dispatch beginning action
> 30 |   dispatch({ ...payload, type: startAction });

Object.assign替换它可以修复此问题。我在webpack.config.js文件中包含了transform-object-rest-spread插件,如下所示:

  module: {
    loaders: [{
      test: /.js?$/,
      exclude: /(node_modules|bower_components)/,
      loader: 'babel',
      query: {
        presets: ['stage-2','es2015','react'],
        plugins: ['transform-class-properties', 'transform-object-rest-spread']
      }
    }]
  }

该应用程序在浏览器中运行良好,这让我相信像这样运行摩卡:

mocha './app/tests/*.spec.js' --compilers js:babel-register --recursive

不包括babel插件。

有没有办法让它包括它们?

由于您的配置在webpack.config.js文件中,Babel只会在通过Webpack运行时编译文件。当你通过Mocha运行文件时,Babel将在没有任何配置的情况下运行。

您应该将配置移到项目中的.babelrc文件中,该文件包含:

{
    presets: ['stage-2','es2015','react'],
    plugins: ['transform-class-properties', 'transform-object-rest-spread']
}

并从您的webpack配置中删除该配置。

尝试使用babel-core/register而不是babel-register

这就是我如何使用摩卡来运行我自己的测试,它工作得很好:

find ./tests -name "*.test.js" | xargs mocha --compilers js:babel-core/register

最新更新