【问题标题】:mocha.opts deprecated, how to migrate to package.json?mocha.opts 已弃用,如何迁移到 package.json?
【发布时间】:2020-02-18 14:30:50
【问题描述】:

我正在做一个大型项目,从上周开始我更新了 mocha,现在我们收到警告:

弃用警告:通过 mocha.opts 进行配置已弃用,并且 将从 Mocha 的未来版本中删除。使用 RC 文件或 package.json 代替。

我想将选项迁移到 package.json 但没有好的迁移指南。 GitHub 上所有有类似问题的帖子都被回答为“查看文档”。但是文档没有显示如何将一个选项从 mocha.opts 转移到 package.json,没有关于它应该如何格式化的信息。我唯一能找到的是“规范”属性是文件运行的模式。对我来说,没有什么是隐含的。

我们的 mocha.opts 文件:

--reporter dot
--require test/mocha.main
--recursive src/**/*.test.js
--grep @slow --invert

我的尝试不起作用

  "mocha": {
    "reporter": "dot",
    "require": "test/mocha.main",
    "spec": "src/**/*.test.js",
    "grep": "@slow --invert"
  },

请解释我应该如何格式化这个配置块,以实现与使用上述 mocha.opts 中的选项时相同的行为

【问题讨论】:

  • 你好,你有没有找到解决方案或获得任何牵引力?
  • 不,我还在耐心等待。我经常查看这篇文章,并查看 mocha 文档以获取任何更新。我向你保证,一旦我知道如何成功迁移,我会在这里写一个详细的答案;)

标签: javascript node.js mocha.js


【解决方案1】:

我在找到迁移到新标准的确切解决方案时也遇到了一些困难,但我最终可以解决这些问题。我希望我不会太晚,我仍然可以帮助你。

首先,您需要一个新的配置文件来替换 mocha.opts。 Mocha 现在提供了相当多的文件格式可供使用。你可以找到这些here in their GIT。我拿了.mocharc.json 并将其用于进一步的示例。虽然添加它并没有改变任何东西,只是它对你没有任何影响。

问题是将 mocha 测试脚本指向 package.json 中的此配置文件。在package.json 的脚本部分的测试脚本中提供--config 标志,如下所示。

"scripts": {
    "test": "mocha --config=test/.mocharc.json --node-env=test --exit",
    "start": "node server"
}

现在您可以更新.mocharc.json 文件中的配置,它们应该会正确反映。下面是一个例子。

{
"diff": true,
"extension": ["js"],
"package": "../package.json",
"reporter": "spec",
"slow": 1500,
"timeout": 20000,
"recursive": true,
"file": ["test/utils/helpers.js", "test/utils/authorizer.js"],
"ui": "bdd",
"watch-files": ["lib/**/*.js", "test/**/*.js"],
"watch-ignore": ["lib/vendor"]
}

我使用file 属性来定义哪些文件应该首先执行,因为它们需要首先执行。它们将按照您在文件数组中提供的顺序执行。您可以使用的另一个属性是slow,它的值定义了 mocha 是否认为执行任何测试用例所花费的时间很慢。

【讨论】:

    【解决方案2】:

    查看此链接以查看 mocha 选项文件的新格式:

    https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.yml

    基本上,您需要一个 .mocharc.yml 或 .mocharc.json(还有几种格式)来设置 mocha 配置。我来到这个帖子也希望找到答案。希望对您有所帮助!

    【讨论】:

    • 感谢您发布此信息。但是在创建我的 mocha.opts 所在的 .mocharc.json 之后,我可以确认正在应用这些选项中的零个。
    • 尝试将--config=<config-file-location 添加到您的命令中,例如我在scripts 下的package.json 中的完整命令是"test": "mocha -r ts-node/register --config=test/.mocharc.json 'test/**/*.ts' --exit"
    【解决方案3】:

    我最终得到了 package.json 通过使用数组而不是您所做的字符串文字来工作。 例如:

    "mocha": {
      "require": ["tsconfig/register"]
    }
    

    可能值得一试!

    【讨论】:

      【解决方案4】:

      好像 mocha 默认不会检查 package.json 的配置,所以你需要传递 --package package.json

      【讨论】:

      • 啊哈,有趣。所以我认为我在 package.json 中的配置被应用为匹配模式 "spec": "src/**/*.test.js" 的文件正在被测试。但是我只是删除了所有配置,结果发现它们是通过默认的 mocha 设置进行测试的....
      【解决方案5】:

          /* This example illustrates how to configure mocha globally
          *1. add the 'mocharch.json' to link mocha to the 'package.json'   like so:
          */
      
          {
              "package": "./package.json"
          }
      
          /* 2. in the 'package.json' add: */
          "mocha": {
              "recursive": "true"
          }

      【讨论】:

      • 感谢您的回复。但我看到绝对零效应。我现在添加了 .mocharch.json 和 mocharch.json (不带点)。都指向你的例子中的 package.json 。在我的 package.json 中,当我将“spec”更改为不匹配我的任何文件时,所有测试仍在运行,表明这些选项没有被应用。我看到的是默认的 mocha 行为。
      【解决方案6】:

      Rathore 的回答很好,但我只是想指出,如果您只是将 .mocharc.json 文件添加到基本目录,则无需指定“--config=test/.mocharc”。 json”在你的 package.json 中,它只是自动找到它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-18
        • 1970-01-01
        • 2016-01-17
        • 2015-02-18
        • 1970-01-01
        • 1970-01-01
        • 2020-02-18
        相关资源
        最近更新 更多