* Restructure * Update nav * Reorg * Reshuffle ecosystem pages * Split up runtime/runtime * Back to runtime/index * Fix issue * Split up runtime/index * Add Writing Tests page * Prettier matcher table * More updates
2.0 KiB
Bun ships with a built-in test runner.
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> ...
Snapshot testing
Snapshots are supported by bun test. First, write a test using the .toMatchSnapshot() matcher:
import { test, expect } from "bun:test";
test("snap", () => {
expect("foo").toMatchSnapshot();
});
Then generate snapshots with the following command:
bun test --update-snapshots
Snapshots will be stored in a __snapshots__ directory next to the test file.
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
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." /%}