- ×
:x: :heavy_check_mark: A beautifully simple and capable test runner
Filed under development aidsShow All
A tiny (~80 lines of TypeScript) test runner focused on simplicity and speed
$ xv ./src src/add.test.js: 0.103ms src/sub.test.js: 0.064ms
Extracted from lowdb. One of the fastest test runner according to this benchmark.
Why
If you've used other test runners, you probably have spent a significant amount of time reading docs, configuring, maintaining and debugging them.
By being extremely simple, xv gets out of your way and lets you be productive faster. In fact, the whole project documentation fits in this page ;)
Install
npm install xv --save-dev
Usage
Create a test file and use Node's built-in
assert
module:// src/add.test.js import assert from 'node:assert/strict' import add from './add.js' // This is plain Node code, there's no xv API export function testAdd() { assert.equal(add(1, 2), 3) }
Edit
package.json
:{ "scripts": { "test": "xv src" } }
Run tests:
npm test # run all test files in ./src npx xv src/add.test.js # run a single test file
Convention
By default, xv will look for files named:
*.test.js
,test.js
,*.test.ts
andtest.ts
TypeScript
With TypeScript + ts-node
npm install ts-node --save-dev
{ "scripts": { "test": "xv --loader=ts-node/esm src" } }
With TypeScript only
Compile your
.ts
files usingtsc
and runxv
on compiled.js
files.For example, assuming your compiled files are in
lib/
, editpackage.json
to runxv
aftertsc
:{ "scripts": { "test": "tsc && xv lib" } }
If you're publishing to npm, edit
package.json
to exclude compiled test files:{ "files": [ "lib", "!lib/**/*.test.js", "!lib/**/test.js" ] }
Common JS
// src/add.test.js const assert = require('assert').strict; const add = require('./add') exports.testAdd = function() { assert.equal(add(1, 2), 3) }
Watch mode
xv doesn't have a watch mode. If the feature is needed, it's recommended to use tools like watchexec or chokidar-cli to re-run xv when there are changes.