xv
v2.1.1
Published
Modern and low maintenance test runner
Downloads
591
Maintainers
Readme
A tiny test runner focused on simplicity and speed
$ xv ./src
src/add.test.js: 0.103ms
src/sub.test.js: 0.064ms
Extracted from lowdb (TypeScript and ESM local database). One of the fastest test runner according to this benchmark.
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
and test.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 using tsc
and run xv
on compiled .js
files.
For example, assuming your compiled files are in lib/
, edit package.json
to run xv
after tsc
:
{
"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.