我使用 Create-React-App 制作了一个 React 应用程序。我的 React 应用程序的 package.json
中有一个测试脚本,如下所示:
"test": "node -r @babel/register -r @babel/polyfill **/*.test.js | tap-color",
这会像 src/App.test.js
一样捕获并执行 src/
中的文件,但不会捕获并执行 header.test.js
中的文件。 src/layout/header/header.test.js
。如果我添加更多层文件夹会怎样?是否有一个正则表达式可以捕获 src/
中的所有文件夹及其子文件夹,无论以 .test.js
结尾的文件如何嵌套?
编辑:我发现 this question on StackOverflow 。根据这个答案,你必须写:
"test": "node -r @babel/register -r @babel/polyfill 'src/**/*.test.js' | tap-color",
不幸的是,这对我来说没有任何匹配。我使用的是 Mac。
最佳答案
您提到的问题对于您的案例来说并不是特别有用。我的答案是有效的,因为 Mocha 被设计为将您提供给它的模式传递给 glob
library以便解释。所以当你这样做 mocha 'src/app/**/*.tests.js'
引号阻止 shell 解释模式,Mocha 得到 src/app/**/*.tests.js
作为赋予它的第一个模式,它赋予 glob
获取实际运行的文件列表。您的情况至少在一个关键方面有所不同:glob
不涉及所以没有什么可以正确解释**
。
您的第一次尝试与您使用不理解 **
的 shell 时发生的情况一致。 。它的解释与*
完全相同。 。所以 shell 解释 **/*.test.js
如*/*.test.js
,扩展此模式并将结果传递给 node
.
在第二次尝试中,您引用了该模式,但这对您没有帮助,因为 node
不进行模式解释。它尝试加载路径src/**/*.test.js
处的文件,按字面解释。这不是你想要的。
我不确定与 Windows 的兼容性影响是什么,但您可以替换 'src/**/*.test.js'
与 $(find src -type f -name '*.test.js')
。 (有关详细信息,请参阅 the man
page。)在运行时,shell 会将其替换为 find
的结果。命令。
或者为了更加简单并降低平台问题蔓延的风险,您可以使用 babel-tap
像这样:
babel-tap 'src/**/*.test.js' | tap-color
如果您使用babel-tap
,实际上没有必要使用 find
因为在内部babel-tap
调用使用 glob
的设施库来解释传递给它的文件名。
我关注的是文件模式问题,但即使没有模式问题,我也没有看到您尝试做的事情将如何工作。考虑此命令,并假设文件存在:
node -r @babel/register -r @babel/polyfill src/a.test.js src/b.test.js
这并不是告诉 Node 运行 src/a.test.js
和src/b.test.js
。相反,它告诉 Node “运行脚本src/a.test.js
并将参数src/b.test.js
传递给它”。我没用过tap
非常喜欢,但我不记得它是这样工作的。使用babel-tap
就像我上面展示的那样也避免了这里的问题。
关于javascript - 如何选择具有自定义文件结尾的任意层深度的所有文件夹和子文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55513249/