2017-07-26 92 views
2

我正在尝试设置一个React模块进行测试。我正在使用汇总来编译一切,这很好。但我也试着介绍测试。如何获得Jest运行测试对汇总+巴贝尔构建?

我的目录结构:

dist/ 
    |- index.js 
src/ 
    |- .babelrc 
    |- util.js 
test/ 
    |- .babelrc 
    |- util.test.js 
rollup.config.js 

到目前为止,一切都很好。我在这适用于我的源文件SRC有.babelrc

{ 
    "presets": [ 
    ["es2015", { "modules": false }], 
    ["env", { "modules": false }], 
    "react" 
    ], 
    "plugins": ["external-helpers"] 
} 

和单独一个的玩笑测试,没有例外汇总要求:

{ 
    "presets": ["es2015", "env", "react"] 
} 

不幸的是,我得到我运行测试时出现错误,抱怨他们在源文件中运行的第一个es6功能(SyntaxError: Unexpected token export)。如果我删除模块异常,则测试通过,但汇总失败。

如何让babel将Rollup应用模块例外,但不适用于Jest?还是有一种完全不同的方式我应该配置这些?

回答

2

我已经解决了这个问题,但我不喜欢它,并且会喜欢更透明的解决方案。

我的test/.babelrc(没有模块例外)现在位于项目的根级别。

在我rollup.config.js,我已经设置rollup-plugin-babel忽略babelrc,并给予它是在我src/.babelrc选项:

babel({ 
    babelrc: false, 
    presets: [ 
    ['es2015', { modules: false }], 
    ['env', { modules: false }], 
    'react', 
    ], 
    plugins: ['external-helpers'], 
    exclude: 'node_modules/**', 
}), 

这似乎是工作,但在根级别ISN有.babelrc实际上用于编译这个软件包看起来像是后来混淆的秘诀。当然有更好的方法?

0

我最近有一个类似的问题(虽然我没有使用React),并且在src /中生成了我的.babelrc文件,但却产生了相同的错误。

我现在使用this configuration为我的项目。自述文件包含一个解释。

关键功能是我已经在 rollup.config.js中指定了babel config ,并且我包含选项babelrc: false

我运行测试时不再出现错误,而且一切正常。这对你来说合理吗?

import resolve from "rollup-plugin-node-resolve"; 
import babel from "rollup-plugin-babel"; 

export default { 
    input: "src/index.js", 
    output: [ 
    { 
     file: "build/index.cjs.js", 
     format: "cjs" 
    }, 
    { 
     file: "build/index.es.js", 
     format: "es" 
    } 
    ], 
    plugins: [ 
    resolve(), 
    babel({ 
     presets: [ 
     [ 
      "env", 
      { 
      modules: false 
      } 
     ] 
     ], 
     plugins: ["external-helpers"], 
     babelrc: false 
    }) 
    ] 
};