全局模式包括所有js排除某些结尾

时间:2016-03-16 00:45:40

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

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

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

2 个答案:

答案 0 :(得分:2)

您可以随时使用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')

答案 1 :(得分:1)

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

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

忘记此AND运算符的另一种可能解决方案,并且仅使用NOT("*.karma").spec.js的否定。我使用test/**/!(*.karma).spec.js尝试了这一点,它运行正常。