【问题标题】:Glob pattern include all js exclude certain endings全局模式包括所有 js 排除某些结尾
【发布时间】:2016-03-16 00:45:39
【问题描述】:

我想将 glob 与 mocha 搭配使用。可悲的是 mocha 不支持 exclude 并且它也不传递 glob 选项,所以我必须在不使用 glob ignore 选项的情况下以单一模式解决这个问题。 https://github.com/mochajs/mocha/issues/1577 另一个解决方案是使用 mocha.opts,但这与业力不兼容,我不知道为什么。我可以为 karma 定义一个与 karma 兼容的 opts 文件,为 node 定义一个与节点兼容的 opts 文件,但这会在问题解决后立即中断,因此我正在寻找另一种解决方案。 https://github.com/karma-runner/karma-mocha/issues/88

我需要匹配 test/**/*.spec.js 并从结果中排除 test/**/*.karma.spec.js。这可以通过单个 glob 模式实现吗?

【问题讨论】:

  • 到目前为止,我尝试过使用"test": "mocha --reporter spec \"test/**/*(.spec.js|!(.node.spec.js))\"",。它已被解析,但我得到一个找不到模块test/features 的错误。这很奇怪,因为该文件夹中没有 .spec.js 或节点模块,只有 BDD 的 .feature 文件。

标签: node.js pattern-matching mocha.js glob node-glob


【解决方案1】:

您始终可以将mochafind 一起使用。例如,以下命令将返回test/**/*.spec.js 的列表并排除test/**/*.karma.spec.js

find test -name '*.spec.js' ! -path '*.karma.spec.js'

将其与mocha 结合使用即可实现您想要的效果:

mocha $(find test -name '*.spec.js' ! -path '*.karma.spec.js')

【讨论】:

    【解决方案2】:

    我们这里说的是AND("*.spec.js", NOT("*.karma.spec.js"))用逻辑运算符表示。我查看了 glob 文档,它不支持 AND 逻辑运算符。

    幸运的是,我们可以将此运算符转换为 OR 否定:NOT(OR(NOT("*.spec.js"), "*.karma.spec.js"))。我尝试了test/**/!((!(*.spec.js)|*.karma.spec.js)),但它不起作用。它试图 require 一个带有 test/features 路径的模块,这是一个目录的路径,而不是一个 js 文件,所以难怪它不管理它。我不知道那是什么错误,但它显然不起作用。

    另一种可能的解决方案是忘记这个AND 运算符,只对NOT("*.karma").spec.js 使用否定。我用test/**/!(*.karma).spec.js 试了一下,效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 2019-06-28
      • 1970-01-01
      • 2014-11-17
      相关资源
      最近更新 更多