NodeJS 如何本地测试运行器递归匹配TypeScript测试文件
问题描述
最近,NodeJS添加了一个本地测试运行器
我可以成功地使用ts-node或tsx运行TypeScript测试
node --loader ts-node/esm --test **/*.test.tsnode --loader tsx --test **/*.test.ts
但是一个主要的缺点是通配符模式**/*.test.ts无法按预期工作。它只能在一个目录下找到*.test.ts文件,并且无法递归地在嵌套目录中查找测试文件。我认为问题在于Node没有将**作为递归通配符模式处理。
编辑: 看起来测试运行器使用了这个通配符库,可能不支持那个语法…
src/bar.test.ts被找到src/foo/bar.test.ts没有被找到
我希望能够在我的应用程序中的任何位置放置*.test.ts文件,并且测试脚本能够执行它们。有没有办法实现这个?
.
├── package.json
├── src
│ ├── app
│ │ ├── dir
│ │ │ └── more-nested.test.ts
│ │ └── nested-example.test.ts
│ └── example.test.ts
└── tsconfig.json
解决方案
** 被称为 globstar 并且不适用于每个系统。
第一个可能的解决方案是从根文件夹使用 find 来获取与指定模式匹配的文件列表(它会查找每个子文件夹),然后对每个找到的文件运行 node --loader tsx --test :
find . -name "*.test.ts" -exec node --loader tsx --test {} ';'
另一个可能的解决方案(参考: https://github.com/nodejs/help/issues/3902#issuecomment-1307124174 )是创建一个自定义脚本,使用 glob 包找到所有文件和子目录,然后在调用中运行测试 node --loader tsx --test ... ,使用 child_process 。
极客笔记