如何让 Jest 对 rollup+babel 构建运行测试?

fut*_*ime 5 jestjs babeljs rollupjs babel-jest

我正在尝试设置一个带有测试的 React 模块。我正在使用汇总来编译所有内容,效果很好。但我也在尝试引入测试。

我的目录结构:

dist/
  |- index.js
src/
  |- .babelrc
  |- util.js
test/
  |- .babelrc
  |- util.test.js
rollup.config.js
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。我有一个.babelrc适用于我的源文件的in src:

{
  "presets": [
    ["es2015", { "modules": false }],
    ["env", { "modules": false }],
    "react"
  ],
  "plugins": ["external-helpers"]
}
Run Code Online (Sandbox Code Playgroud)

和一个单独的 Jest 测试,它没有 Rollup 要求的例外:

{
  "presets": ["es2015", "env", "react"]
}
Run Code Online (Sandbox Code Playgroud)

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

我如何让 babel 为 Rollup 应用模块异常,但不适用于 Jest?或者我应该以完全不同的方式配置这些吗?

fut*_*ime 3

我已经找到了解决方案,但我不喜欢它,并且希望有一个更透明的解决方案。

我的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/**',
}),
Run Code Online (Sandbox Code Playgroud)

这似乎可行,但是.babelrc在根级别拥有一个实际上并未在编译包时使用的文件似乎会导致以后的混乱。当然有更好的方法吗?