* Various docs updates * Add mocks page * Fix make * WebKit instructions * Update instructions * Updates * Update nodejs compat table * Document trusted deps * Tweak trustedDependencies docs * Document --exact * Update test docs * Tweaks * Boring * Remove redundant j * Undo makefile changes * Undo makefile changes * Update page title * Regen * Undo changes
3.5 KiB
Bun ships with a fast built-in test runner. Tests are executed with the Bun runtime, and support the following features.
- TypeScript and JSX
- Lifecycle hooks
- Snapshot testing
- UI & DOM testing
- Watch mode with
--watch - Script pre-loading with
--preload
Run tests
$ bun test
Tests are written in JavaScript or TypeScript with a Jest-like API. Refer to Writing tests for full documentation.
import { expect, test } from "bun:test";
test("2 + 2", () => {
expect(2 + 2).toBe(4);
});
The runner recursively searches the working directory for files that match the following patterns:
*.test.{js|jsx|ts|tsx}*_test.{js|jsx|ts|tsx}*.spec.{js|jsx|ts|tsx}*_spec.{js|jsx|ts|tsx}
You can filter the set of tests to run by passing additional positional arguments to bun test. Any file in the directory with an absolute path that contains one of the filters will run. Commonly, these filters will be file or directory names; glob patterns are not yet supported.
$ bun test <filter> <filter> ...
The test runner runs all tests in a single process. It loads all --preload scripts (see Lifecycle for details), then runs all tests. If a test fails, the test runner will exit with a non-zero exit code.
Watch mode
Similar to bun run, you can pass the --watch flag to bun test to watch for changes and re-run tests.
$ bun test --watch
Lifecycle hooks
Bun supports the following lifecycle hooks:
| Hook | Description |
|---|---|
beforeAll |
Runs once before all tests. |
beforeEach |
Runs before each test. |
afterEach |
Runs after each test. |
afterAll |
Runs once after all tests. |
These hooks can be define inside test files, or in a separate file that is preloaded with the --preload flag.
$ bun test --preload ./setup.ts
See Test > Lifecycle for complete documentation.
Mocks
Create mocks with the mock function. Mocks are automatically reset between tests.
import { test, expect, mock } from "bun:test";
const random = mock(() => Math.random());
test("random", async () => {
const val = random();
expect(val).toBeGreaterThan(0);
expect(random).toHaveBeenCalled();
expect(random).toHaveBeenCalledTimes(1);
});
See Test > Mocks for complete documentation.
Snapshot testing
Snapshots are supported by bun test. See Test > Snapshots for complete documentation.
UI & DOM testing
Bun is compatible with popular UI testing libraries:
See Test > DOM Testing for complete documentation.
Performance
Bun's test runner is fast.
{% image src="/images/buntest.jpeg" caption="Running 266 React SSR tests faster than Jest can print its version number." /%}