在我的 npm 包中,我想模拟 Meteor 遵循的模式:一个源文件(名为 client.js
)有一个测试文件(名为 client.tests.js
) 位于 src/
文件夹中。使用 npm test
命令运行测试。
我正在关注“t”的使用文档。我不想在我的包测试命令中使用 find
。
我了解 mocha 可以递归执行测试:
mocha --recursive
我了解 mocha 可以使用
--recursive
标志在特定子文件夹中执行测试:mocha src --recursive
我也明白我可以通过传递
*.tests.js
来指定一个 glob 来过滤文件:mocha *.tests.js
但是,我想要所有三个。我希望 mocha 仅测试 src 文件夹中以 tests.js
结尾的文件,递归检查子目录。
mocha --recursive *.tests.js
// See the files?
$ > ll ./src/app/
total 168
-rw-r--r-- ... client.js
-rw-r--r-- ... client.tests.js
// Option A
$ > mocha --recursive *.tests.js
Warning: Could not find any test files matching pattern: *.tests.js
No test files found
// Option B
$ > mocha *.tests.js --recursive
Warning: Could not find any test files matching pattern: *.tests.js
No test files found.
// Option C
$ > mocha --recursive src/app/*.tests.js
3 passing (130ms)
3 failing
所以……
- 为什么 mocha 没有提取子文件夹中的
*.tests.js
文件? - 如果我指定文件的完整路径,为什么它会起作用?
- 如何让它按需要工作?
最佳答案
--recursive
标志用于对目录进行操作。如果您要传递与目录匹配的 glob,则将递归检查这些目录,但如果您传递与文件匹配的 glob,就像您正在做的那样,则 --recursive
无效。我建议不要将 --recursive
与 glob 一起使用,因为 glob 已经具有在子目录中递归查找的能力。你可以这样做:
mocha 'src/app/**/*.tests.js'
这将在 src/app
中递归匹配所有匹配 *.tests.js
的文件。请注意我如何在模式周围使用单引号。这是为了引用该模式,以便将其按原样传递给 Mocha 的通配符代码。否则,您的 shell 可能会解释它。根据选项,某些 shell 会将 **
转换为 *
,而您不会得到想要的结果。
关于javascript - mocha 如何递归搜索我的 `src` 文件夹以查找特定的文件名模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43005580/