NodeJS recently added a native test runner
I can successfully get it to run typescript tests with ts-node or tsx
node --loader ts-node/esm --test **/*.test.tsnode --loader tsx --test **/*.test.tsBut one major drawback is the glob pattern (**/*.test.ts) is not working as expected. It is only finding *.test.ts files down one directory, and is not recursively finding test files in nested directories. I think the problem is that node isn't treating ** as a recursive glob pattern.
edit: It looks like the testrunner uses this glob library which may not support that syntax...
src/bar.test.ts is foundsrc/foo/bar.test.ts is not foundI'd like to be able to put *.test.ts files anywhere in my app and have the test script execute them. Is there any way to accomplish this?
.
├── package.json
├── src
│ ├── app
│ │ ├── dir
│ │ │ └── more-nested.test.ts
│ │ └── nested-example.test.ts
│ └── example.test.ts
└── tsconfig.json
** is known as globstar and is not available on every system.
First possible solution is to use find from the root folder to get a list of files matching a specified pattern (it will look in every subfolder) and then run node --loader tsx --test for every found file:
find . -name "*.test.ts" -exec node --loader tsx --test {} ';'
Another possible solution (reference: https://github.com/nodejs/help/issues/3902#issuecomment-1307124174) is to create a custom script that finds all files and subdirectories using glob package and then run tests invoking node --loader tsx --test ... with child_process.
Check also this: Why can't ** be used (for recursive globbing) in a npm package.json script, if it works in 'npm shell'?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With