使用 Mocha 测试 ES 2015 模块

Testing ES 2015 modules with Mocha

我刚刚在工作中分配了一个使用原始本机的项目 imports/exports(仅支持最新的浏览器),其中很大一部分是由一些顾问编写的(我不能解雇他们或更改project/toolchain 的大块)。我更喜欢 运行 我的测试尽可能在 node.js 中进行(必要时使用 jsdom),并且通常每分钟多次(即它们需要快速)。我 强烈 不想每隔几秒就用 alt-tab 切换到浏览器来查看结果。

因为顾问的一些技术选择违背了我们的意愿(长话短说),我不得不使用mocha和chai进行测试(我习惯了Jasmine和Jest),他们没有tests/testing 工作流程设置(同样,我无法解雇他们,我无法控制)。

在搜索时我找到了 个问题及其答案。许多建议已被弃用,或者适用于旧版本,例如通天塔

我终于达到了安装 @babel/core、@babel/register 和 @/babel/preset-env 并准备就绪的地步。

所以我

mocha --require @babel/register path/to/test.js

通过在 .babelrc 中进行适当的预设,我得到

regeneratorRuntime is not defined

它显然是在尝试 polyfill async/await,即使节点支持它。

不需要转换现代语法的各个方面,我只需要将 import/export 语句更改为 module.exports 并要求。我真的不想有额外的开销 transforms/polyfills,我只是想在这里 运行 做一些测试。我添加 @babel/polyfill 只是为了让它工作,但我可以将它设置为仅转换 import/export 语句吗?

您可以add targets to @babel/preset-env让它知道目标环境。

在这种情况下,您需要定位 Node.js 的当前版本:

presets: [
  [
    '@babel/preset-env',
    {
      targets: {
        node: 'current',
      },
    },
  ],
  ...
]