NodeJS 如何本地测试运行器递归匹配TypeScript测试文件
问题描述
最近,NodeJS添加了一个本地测试运行器
我可以成功地使用ts-node
或tsx
运行TypeScript测试
node --loader ts-node/esm --test **/*.test.ts
node --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
。