提问人:Zach Lysobey 提问时间:10/21/2023 最后编辑:Zach Lysobey 更新时间:10/21/2023 访问量:74
如何递归地将 Typescript 测试文件与 NodeJS 原生测试运行程序匹配
How to recursively match Typescript test files with NodeJS native testrunner
问:
NodeJS 最近添加了一个原生测试运行程序
我可以成功地让它运行打字稿测试,或者ts-node
tsx
node --loader ts-node/esm --test **/*.test.ts
node --loader tsx --test **/*.test.ts
但一个主要缺点是 glob 模式 () 没有按预期工作。它只在一个目录下查找文件,而不是递归地在嵌套目录中查找测试文件。我认为问题在于节点没有被视为递归 glob 模式。**/*.test.ts
*.test.ts
**
编辑:看起来测试运行程序使用了这个可能不支持该语法的 glob 库......
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
答:
1赞
Alberto Fecchi
10/21/2023
#1
**
称为 globstar,并非在每个系统上都可用。
第一个可能的解决方案是从根文件夹中获取与指定模式匹配的文件列表(它将在每个子文件夹中查找),然后对每个找到的文件运行:find
node --loader tsx --test
find . -name "*.test.ts" -exec node --loader tsx --test {} ';'
另一种可能的解决方案(参考:https://github.com/nodejs/help/issues/3902#issuecomment-1307124174)是创建一个自定义脚本,该脚本使用 package 查找所有文件和子目录,然后运行调用 的测试。glob
node --loader tsx --test ...
child_process
还要检查一下:如果 ** 在“npm shell”中有效,为什么不能在 npm package.json脚本中使用(用于递归通配)?
评论
0赞
Alberto Fecchi
10/21/2023
@ZachLysobey我已经用另一种可能(可能更聪明)的解决方案更新了我的答案。我只做了一个快速检查,但似乎工作得很好。
0赞
Zach Lysobey
10/21/2023
是的,一个朋友刚刚提出了类似的想法:$ find . -type f -iname '*.test.ts' -print0 | xargs -0 node --loader ts-node/esm --test
评论