Skip to content

typicode/xv

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
Dec 16, 2022
Aug 30, 2021
Dec 16, 2022
Dec 17, 2022
Dec 17, 2022
Jun 25, 2021


xv

Node.js CI install size

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.