如何递归地将 Typescript 测试文件与 NodeJS 原生测试运行程序匹配

How to recursively match Typescript test files with NodeJS native testrunner

提问人:Zach Lysobey 提问时间:10/21/2023 最后编辑:Zach Lysobey 更新时间:10/21/2023 访问量:74

问:

NodeJS 最近添加了一个原生测试运行程序

我可以成功地让它运行打字稿测试,或者ts-nodetsx

  • 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
节点 .js 打字稿 glob 节点测试运行程序

评论


答:

1赞 Alberto Fecchi 10/21/2023 #1

**称为 globstar,并非在每个系统上都可用。

第一个可能的解决方案是从根文件夹中获取与指定模式匹配的文件列表(它将在每个子文件夹中查找),然后对每个找到的文件运行:findnode --loader tsx --test

find . -name "*.test.ts" -exec node --loader tsx --test {} ';'

另一种可能的解决方案(参考:https://github.com/nodejs/help/issues/3902#issuecomment-1307124174)是创建一个自定义脚本,该脚本使用 package 查找所有文件和子目录,然后运行调用 的测试。globnode --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