【问题标题】:Running Mocha 6 ES6 tests with Babel 7, how to set up?使用 Babel 7 运行 Mocha 6 ES6 测试,如何设置?
【发布时间】:2020-05-26 23:15:57
【问题描述】:

对于用 ES6/7 编写的库,我想将库编译(到 ES5)到 dist/ 文件夹。我还想为这个库运行测试(用 ES6/7 编写)。

我的开发依赖项如下所示(package.json):

"devDependencies": {
  "@babel/cli": "^7.4.4",
  "@babel/core": "^7.4.5",
  "@babel/preset-env": "^7.4.5",
  "@babel/register": "^7.4.4",
  "chai": "^4.2.0",
  "mocha": "^6.1.4",
  "sinon": "^7.3.2"
},

我的构建和测试脚本如下所示(package.json):

"scripts": {
  "test": "mocha --require @babel/register",
  "build": "babel src -d dist --presets=@babel/preset-env"
},

运行npm run build 效果很好。 dist/ 文件夹中填充了转译文件。

运行 npm run test 似乎不起作用 - 这是我的问题。

> mocha --require @babel/register

/Users/dro/Repos/lib/node_modules/yargs/yargs.js:1163
      else throw err
           ^

ReferenceError: regeneratorRuntime is not defined

最初我遇到了一个导入错误,通过添加 .babelrc 文件解决了这个问题。

下面是我的 .babelrc 文件内容。

{
  "presets": ["@babel/preset-env"]
}

我正在阅读有关 regeneratorRuntime 的信息,它让我找到了 this link about babel-polyfill,他们解释说我不应该需要那个 polyfill。

这将模拟一个完整的 ES2015+ 环境(没有

正确设置需要什么?


我没有使用 webpack。

【问题讨论】:

    标签: npm mocha.js babeljs transpiler


    【解决方案1】:

    在 ES6 中使用 Mocha 和 Babel 7 进行测试。看这里:https://dev.to/bnorbertjs/my-nodejs-setup-mocha--chai-babel7-es6-43eihttp://jamesknelson.com/testing-in-es6-with-mocha-and-babel-6/

    npm install --save @babel/runtime 
    npm install --save-dev @babel/plugin-transform-runtime
    

    并且,在 .babelrc 中,添加:

    {
        "presets": ["@babel/preset-env"],
        "plugins": [
            ["@babel/transform-runtime"]
        ]
    }
    

    【讨论】:

    • 感谢这些资源 - 我已经阅读了 James Knelson 的文章,因为它是从 2015 年开始的,它不再适用。我现在看看 dev.to!
    • dev.to 上的文章很有帮助,但仍不能解决我的问题。他们使用的是 Mocha 5,其中--compiler 选项可用。在 Mocha 6 中,我们只能使用 --require,如 here in the compilers deprecation article 所述。
    • 阅读成绩单:egghead.io/lessons/…
    • 在 Babel 7 中,--compilers 标志被弃用,取而代之的是我在上面使用的--register。添加 .babelrc 文件后,我还用错误更新了问题。我正在修改测试脚本,似乎这也失败了"mocha --require @babel/register @babel/polyfill (Error: No test files found: "@babel/polyfill"),但安装了包。
    • v7 迁移文章提供了非常丰富的信息 - 我直到现在才找到它。您的回答完美 - 谢谢!
    【解决方案2】:

    project documentation

    npm install --save-dev babel-register
    
    

    在您的 package.json 文件中进行以下更改:

    {
      "scripts": {
        "test": "mocha --require babel-register"
      }
    }
    

    有些功能需要 polyfill:

    npm install --save-dev babel-polyfill
    
    {
      "scripts": {
        "test": "mocha --require babel-polyfill --require babel-register"
      }
    }
    

    【讨论】:

    • 这个方法可行,但是这里复制的步骤还不够。引用项目文件:太好了!你已经配置了 Babel,但你并没有让它真正做任何事情。 ...为了启用预设,您必须在 .babelrc 文件中定义它,如下所示:{ "presets": ["@babel/preset-env"] }
    • 旁注,您想使用@babel/PAKAGE-NAME 而不是babel-PACKAGE-NAME。例如@babel/register 不是 babel-register。除了一些你没有得到像这样干净的一对一映射的地方。 babel 不久前从babel- 约定切换到@babel/ 约定。 babel- 软件包得到维护,但只有 @babel/ 软件包得到更新
    猜你喜欢
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2016-11-08
    • 1970-01-01
    • 2016-08-26
    • 2016-05-04
    相关资源
    最近更新 更多