如何让 mocha 递归地执行所有子文件夹中的测试?

Eri*_*k B 3 javascript bash mocha.js filepattern

我将测试分组在文件夹中,如下所示:

\n\n
test/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 unit/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 integration/\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 acceptance/\n
Run Code Online (Sandbox Code Playgroud)\n\n

在上面的每个文件夹中,都有一些测试文件(例如test.js

\n\n

我使用以下命令执行不同的测试套件:

\n\n
mocha test/unit/**/*.js\nmocha test/integration/**/*.js\nmocha test/acceptance/**/*.js\n
Run Code Online (Sandbox Code Playgroud)\n\n

我最近决定添加一个子文件夹test/unit,以稍微组织一下内容:

\n\n
test/\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 unit/\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 subfolder/\n    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 new.test.js\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foo.test.js\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bar.test.js\n
Run Code Online (Sandbox Code Playgroud)\n\n

但现在mocha只执行测试new.test.js

\n\n

我认为/**/*.js这意味着它会递归地在所有文件夹中查找.js文件,但这不是我看到的行为。这是我的错误还是误解?

\n

Eri*_*k B 7

通过将这些完全相同的模式用引号引起来,mocha将解析这些模式,而不是bash

"scripts": {
  "test:unit": "mocha \"test/unit/**/*.js\""
}
Run Code Online (Sandbox Code Playgroud)

幸运的是,mocha按预期解析了该模式,并将递归查找.js中的所有文件test/unit,包括任何级别的子文件夹。

TL;DR没有必要继续阅读,除非您尝试对 以外的其他内容执行类似的操作mocha。下面是我对 的bash文件模式匹配的了解:

如果没有引号,我当时无法使其在两个以上级别上工作:

mocha test/unit/**
Run Code Online (Sandbox Code Playgroud)

上面匹配所有文件test/unit以及第一级子文件夹,但这将匹配任何文件而不仅仅是.js

mocha test/unit/{,**/}*.js
Run Code Online (Sandbox Code Playgroud)

现在我们只匹配.js文件,但仍然只匹配test/unit第一级子文件夹。