Fed up of the difficulty to run tests in this messy world of Node + common JS + ESM + Babel + Jest + TypeScript? You just want to run your tests of your code, period? The alternative here is as follows:
- Run all TypeScript stuff using
tsx
as a drop-in replacement for thenode
command. It just works with TypeScript, and it's fast. - A test is an executable: you don't need a test runner to run a single test file. Instead, just execute the test file:
Thanks to the
tsx src/My.test.ts
assert()
predicates, this will throw aTestError
if the test doesn't pass (this can also work with atsx
alternative as well, buttsx
makes it easier). - Keep syntax as similar as possible to the syntax used by Jest (
describe()
,test()
,expect()
,beforeEach()
...) , which is the most popular framework to test JS/TS.
// MyTest.ts
import { describe, expect, test } from '@javarome/testscript';
describe("Some software item", () => {
test("does something", async () => {
const item = new SoftwareItem('item1')
expect(item.name).toBe("item1")
expect(item.name).not.toBe("item2")
})
})
- The only remaining thing you need is a
TestRunner
to locate tests and execute them at once. One can be run using this command:
testscript
(make sureto install tsx
before)
This will output: And an error will output as:
Of course this is typically what you want to run for your test
npm script.
By default, it will look for all *.test.ts
files in all subdirs, but you can specifiy a different file pattern, like:
testscript --include **/*.spec.ts
By default node_modules
is ignored. You can also customize those excluded paths by specifying a second argument, which can be an array of paths:
testscript --include **/*.test.ts --exclude '{out/**,node_modules/**/*.*}'
You can also use the TESTSCRIPT_INCLUDE
and TESTSCRIPT_EXCLUDE
env vars.
Once you have your test scripts ready in your package.json
, all you need to need all or one test is to set your breakpoints in your tests
and run those scripts in debug mode.
Also note that the TestRunner
uses a DefaultLogger
instance as a Logger
, which can be specified as its third constructor argument.
You can also set the LOGLEVEL
env var to include debug
.