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

How do I get mocha to execute tests in all subfolders recursively?

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

test/
├── unit/
├── integration/
└── acceptance/

在上述每个文件夹中,都有多个测试文件(例如test.js

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

mocha test/unit/**/*.js
mocha test/integration/**/*.js
mocha test/acceptance/**/*.js

我最近决定在 test/unit 中添加一个子文件夹,以便稍微整理一下:

test/
└── unit/
    ├── subfolder/
    │   └── new.test.js
    ├── foo.test.js
    └── bar.test.js

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

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

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

"scripts": {
  "test:unit": "mocha \"test/unit/**/*.js\""
}

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

TL;DR 无需进一步阅读,除非您尝试对 mocha 以外的内容进行类似的操作。下面是我在 bash 的文件模式匹配方面的进展:

没有引号,我当时无法让它工作超过两个级别:

mocha test/unit/**

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

mocha test/unit/{,**/}*.js

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