Runtime
Bundler
Package Manager
Test Runner
Guides
Reference
Blog
Install Bun
Guides Test Runner

Run your tests with the Bun test runner

Bun has a built-in test runner with a Jest-like expect API.


To use it, run bun test from your project directory. The test runner recursively searches for files matching the following patterns and runs the tests they contain.

File Tree
*.test.{js|jsx|ts|tsx}
*_test.{js|jsx|ts|tsx}
*.spec.{js|jsx|ts|tsx}
*_spec.{js|jsx|ts|tsx}

Here's the output of a typical run: three test files (test.test.js, test2.test.js, and test3.test.js), each containing two tests (add and multiply).

terminal
$ bun test
bun test v1.3.14 (9c68abdb)

test.test.js:
 add [0.87ms]
 multiply [0.02ms]

test2.test.js:
 add [0.72ms]
 multiply [0.01ms]

test3.test.js:
 add [0.54ms]
 multiply [0.01ms]

 6 pass
 0 fail
 6 expect() calls
Ran 6 tests across 3 files. [9.00ms]

To only run certain test files, pass a positional argument to bun test. The runner only executes files with that argument in their path.

terminal
$ bun test test3
bun test v1.3.14 (9c68abdb)

test3.test.js:
 add [1.40ms]
 multiply [0.03ms]

 2 pass
 0 fail
 2 expect() calls
Ran 2 tests across 1 files. [15.00ms]

Every test has a name: the first argument to the test function. Tests can also be grouped into suites with describe.

import { test, expect, describe } from "bun:test";

describe("math", () => {
  test("add", () => {
    expect(2 + 2).toEqual(4);
  });

  test("multiply", () => {
    expect(2 * 2).toEqual(4);
  });
});

To filter tests by name, use the -t/--test-name-pattern flag.

-t add only runs tests with "add" in the name. The pattern matches test names defined with test and suite names defined with describe.

terminal
$ bun test -t add
bun test v1.3.14 (9c68abdb)

test.test.js:
 add [1.79ms]

test2.test.js:
 add [2.30ms]

test3.test.js:
 add [0.32ms]

 3 pass
 3 filtered out
 0 fail
 3 expect() calls
Ran 3 tests across 3 files. [59.00ms]

See bun test.

On this page

No Headings