我想用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模式吗?
答案 0 :(得分:2)
您可以随时使用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')
答案 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
尝试了这一点,它运行正常。