如何让Jest针对汇总+ babel构建运行测试?

时间:2017-07-26 12:37:11

标签: babeljs jestjs rollupjs babel-jest

我正在尝试使用测试设置React模块。我正在使用汇总来编译所有内容,这很好。但我也试图引入测试。

我的目录结构:

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"]
}

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

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

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

如何让babel为Rollup应用模块例外,但不适用于Jest?或者我应该采用完全不同的方式来配置它们?

1 个答案:

答案 0 :(得分: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/**',
}),

这似乎有效,但在根级别.babelrc实际上没有用于编译程序包,这似乎是后来混淆的一个秘诀。当然有更好的方法吗?