【问题标题】:With mocha, how do I run all tests that *don't* have (slow) in the name?使用 mocha,我如何运行名​​称中*不*包含(慢)的所有测试?
【发布时间】:2015-01-10 13:31:17
【问题描述】:

我有很多测试,其中一些在名称中带有“(slow)”:

其中一些比标记为(慢)的测试慢,但被其他测试依赖,因此不能跳过。我只想跳过名称中带有 (slow) 的那些——这可能吗?

我正在使用摩卡。

【问题讨论】:

  • 我想指出,如果一个测试依赖于另一个测试,那么依赖关系应该被移动到一个 before() 钩子上,该钩子将为相关测试调用。嵌套 describe() 套件也是有益的。对于同一事物的多个测试,我倾向于将缓慢的事物放在一个由 before 钩子等待的承诺中,并由测试等待。然后在测试中,我输入了我期望实际失败的代码(如 assert.deepEqual)

标签: javascript unit-testing testing mocha.js


【解决方案1】:

在我看来,您正在为在浏览器中加载以运行 Mocha 的页面执行此操作。要在浏览器中执行此操作,您可以在页面的 URL 中传递这些参数:

  • grep 大致对应于命令行上的--grep 选项。这将运行的测试范围缩小到与传递给grep 的表达式匹配的那些测试。然而,目前(甚至从 2.0.1 开始)没有办法让 Mocha 将此参数解释为 正则表达式。它总是被解释为一个字符串。这就是为什么我说“大约对应”。命令行中的--grep 是正则表达式,但URL 中传递的grep 参数是字符串。

  • invert 对应于命令行上的--invert 选项。这将反转grep 执行的匹配,从而选择grep 不匹配的测试。

因此,如果您通过附加以下字符串 ?grep=(slow)&invert=1 打开页面,它将运行其中没有字符串 "(slow)" 的测试。

【讨论】:

  • 可以从 javascript 代码中使用正则表达式。例如:mocha.setup({ui: 'bdd',grep: new RegExp(".*")});mocha.run();
  • 测试为 mocha 6.2.2,--grep 确实采用正则表达式,并且负前瞻确实有效:stackoverflow.com/a/26918842/895245
【解决方案2】:

您可以通过组合使用两个命令行开关来完成此操作。以下是文档的相关部分:

-g, --grep <pattern> only run tests matching <pattern> -i, --invert inverts --grep matches

【讨论】:

    【解决方案3】:

    Grep 接受一个正则表达式模式,你可以这样做:

    mocha --grep '^(?!.*\\b\(slow\)\\b)'
    

    【讨论】:

      【解决方案4】:
      mocha --opts mocha.opts --grep "^(?!.*SomeExpression)"
      

      我无法在表达式中添加括号 - bash / mocha 失败。我建议你去掉括号,在描述中添加一个类似@performance的标签,然后像之前的一样用grep表达式执行mocha。

      【讨论】:

        猜你喜欢
        • 2015-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-05
        • 2021-07-17
        • 2020-08-26
        • 1970-01-01
        • 2014-09-20
        相关资源
        最近更新 更多