QUnitX
What it is
QUnitX is a free, MIT-licensed testing project for JavaScript and TypeScript. Teams can keep one test file and run it with Node.js, Deno, or a browser. The project requires no configuration files, setup files, transform pipeline, injected globals, or runtime dependencies, and it runs TypeScript as-is. Assertions cover deep and partial equality, error matching, ordered steps, assertion counts, and per-test timeouts. Nested modules provide before, beforeEach, afterEach, and after hooks. Its browser interface filters tests, shares filtered views by URL, reruns individual tests, and displays assertion differences. The linked CLI runs tests in headless Chromium, Firefox, or WebKit and streams TAP output. It supports esbuild plugins, GitHub annotations, JUnit XML, V8 coverage reports, and a JavaScript API. Core installation needs Node.js 22 or later or Deno 2 or later. The CLI needs Node.js 24 or Deno 2.7 or later, and standalone Chromium mode needs Chrome or CHROME_BIN.
For and against
For
- Runs one file across three environments
- No configuration or runtime dependencies
- Nested lifecycle hooks
- Browser filtering and assertion diffs
- JUnit, TAP, and coverage outputs
Against
- Requires Node.js 22+ or Deno 2+
- CLI requires newer runtimes
- ESM only
- Browser coverage has source-map limitation
The verdict
QUnitX provides a single, open-source testing approach across Node.js, Deno, and browsers. Its version requirements and browser coverage limitation are important deployment considerations.
Who it suits
QUnitX suits JavaScript or TypeScript teams using Node.js, Deno, or browser testing. It is especially relevant to users wanting a configuration-free, open-source runner.
On the record
- Assertions
- Assertions include structural and partial equality, error matching, execution-order checks, assertion counts, and per-test timeouts.github.com · read 8 Oct 2026
- Browser options
- The documented browser runner supports Chromium, Firefox, and WebKit, plus watch mode, fail-fast, timeout, and lifecycle hooks.github.com · read 8 Oct 2026
- Browser runner
- The separate qunitx-cli bundles tests for a real browser and streams TAP to the terminal, with an optional live QUnit UI.github.com · read 8 Oct 2026
- Browser UI
- The browser UI can filter by module or test, preserve filters in shareable URLs, rerun individual tests, and show assertion diffs.github.com · read 8 Oct 2026
- Compatibility limits
- QUnitX requires Node.js 22 or later or Deno 2 or later, and ships as ESM only.github.com · read 8 Oct 2026
- Coverage
- The README documents coverage with c8 for Node.js and Deno and identifies browser coverage as a limitation because bundling with esbuild loses source mapping.github.com · read 8 Oct 2026
- Coverage limit
- The QUnitX README says browser coverage has a source-map limitation because qunitx-cli bundles test files with esbuild.github.com · read 4 Oct 2026
- Hooks
- Nested modules support before, beforeEach, afterEach, and after hooks, with outer-first setup and inner-first teardown ordering.github.com · read 8 Oct 2026
- Install
- The README gives npm and Deno installation commands and requires Node.js 22 or later or Deno 2 or later.github.com · read 4 Oct 2026
- Integrations
- The README documents installation through npm and Deno, and describes a JSR package published from CI with provenance.github.com · read 8 Oct 2026
- License
- The repository identifies its license as MIT.github.com · read 8 Oct 2026
- Maker
- The repository identifies izelnakri as its owner and describes QUnitX as a project by its maker; it provides no headquarters or founding date in the opened pages.github.com · read 4 Oct 2026
- No configuration
- The README says QUnitX requires no config or setup files, runs TypeScript as-is, and has zero runtime dependencies.github.com · read 8 Oct 2026
- Purpose
- QUnitX lets teams write one JavaScript or TypeScript test file and run it unchanged with Node.js, Deno, or in a browser.github.com · read 8 Oct 2026
- Requirements
- The CLI requires Node.js 24 or later or Deno 2.7 or later; its default Chromium browser mode also requires system Chrome or CHROME_BIN when using the standalone binary.github.com · read 4 Oct 2026
- Runners
- Node.js and Deno use their native test runners, while the browser path re-exports QUnit.github.com · read 8 Oct 2026
- Runtime difference
- The README notes that Node runs todo test bodies while ignoring their failures, whereas Deno maps todo and skip to ignored tests whose bodies do not run.github.com · read 8 Oct 2026
- Setup
- The project says it needs no configuration, setup files, transform pipeline, injected globals, or runtime dependencies.github.com · read 4 Oct 2026