全局模式包括所有的js排除特定的结局

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

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

你总是可以使用mocha一起 find 。 例如,以下命令将返回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') 

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

对我们来说,幸运的是,我们可以将这个运算符转换为ORNOT(OR(NOT("*.spec.js"), "*.karma.spec.js"))NOT(OR(NOT("*.spec.js"), "*.karma.spec.js")) 。 我试过了test/**/!((!(*.spec.js)|*.karma.spec.js)) ,但是不起作用。 它试图需要一个模块的test/featurespath,这是一个目录的path,而不是一个JS文件,所以难怪它不pipe理它。 我不知道是什么样的错误,但显然不工作。

另一个可能的解决scheme是忘记这个AND运算符,并且只使用NOT("*.karma").spec.js 。 我试了一下test/**/!(*.karma).spec.js ,这个工作正常。