mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 18:38:55 +00:00
* 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
92 lines
2.0 KiB
Markdown
92 lines
2.0 KiB
Markdown
Bun ships with a built-in test runner.
|
|
|
|
## Run tests
|
|
|
|
```bash
|
|
$ bun test
|
|
```
|
|
|
|
Tests are written in JavaScript or TypeScript with a Jest-like API. Refer to [Writing tests](/docs/test/writing) for full documentation.
|
|
|
|
```ts#math.test.ts
|
|
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.
|
|
|
|
```bash
|
|
$ bun test <filter> <filter> ...
|
|
```
|
|
|
|
## Snapshot testing
|
|
|
|
Snapshots are supported by `bun test`. First, write a test using the `.toMatchSnapshot()` matcher:
|
|
|
|
```ts
|
|
import { test, expect } from "bun:test";
|
|
|
|
test("snap", () => {
|
|
expect("foo").toMatchSnapshot();
|
|
});
|
|
```
|
|
|
|
Then generate snapshots with the following command:
|
|
|
|
```bash
|
|
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.
|
|
|
|
```bash
|
|
$ 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." /%}
|
|
|
|
<!--
|
|
Consider the following directory structure:
|
|
|
|
```
|
|
.
|
|
├── a.test.ts
|
|
├── b.test.ts
|
|
├── c.test.ts
|
|
└── foo
|
|
├── a.test.ts
|
|
└── b.test.ts
|
|
```
|
|
|
|
To run both `a.test.ts` files:
|
|
|
|
```
|
|
$ bun test a
|
|
```
|
|
|
|
To run all tests in the `foo` directory:
|
|
|
|
```
|
|
$ bun test foo
|
|
```
|
|
|
|
Any test file in the directory with an _absolute path_ that contains one of the targets will run. Glob patterns are not yet supported. -->
|