bun-types 1.3.2-canary.20251106T140813 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bun.d.ts +102 -6
- package/docs/bundler/bytecode.mdx +465 -0
- package/docs/bundler/css.mdx +1024 -0
- package/docs/bundler/esbuild.mdx +253 -0
- package/docs/bundler/executables.mdx +535 -0
- package/docs/bundler/fullstack.mdx +1064 -0
- package/docs/bundler/hot-reloading.mdx +229 -0
- package/docs/bundler/html-static.mdx +386 -0
- package/docs/bundler/index.mdx +1499 -0
- package/docs/bundler/loaders.mdx +356 -0
- package/docs/bundler/macros.mdx +328 -0
- package/docs/bundler/minifier.mdx +1306 -0
- package/docs/bundler/plugins.mdx +411 -0
- package/docs/feedback.mdx +85 -0
- package/docs/guides/binary/arraybuffer-to-array.mdx +29 -0
- package/docs/guides/binary/arraybuffer-to-blob.mdx +26 -0
- package/docs/guides/binary/arraybuffer-to-buffer.mdx +27 -0
- package/docs/guides/binary/arraybuffer-to-string.mdx +17 -0
- package/docs/guides/binary/arraybuffer-to-typedarray.mdx +41 -0
- package/docs/guides/binary/blob-to-arraybuffer.mdx +16 -0
- package/docs/guides/binary/blob-to-dataview.mdx +16 -0
- package/docs/guides/binary/blob-to-stream.mdx +16 -0
- package/docs/guides/binary/blob-to-string.mdx +17 -0
- package/docs/guides/binary/blob-to-typedarray.mdx +16 -0
- package/docs/guides/binary/buffer-to-arraybuffer.mdx +16 -0
- package/docs/guides/binary/buffer-to-blob.mdx +16 -0
- package/docs/guides/binary/buffer-to-readablestream.mdx +43 -0
- package/docs/guides/binary/buffer-to-string.mdx +27 -0
- package/docs/guides/binary/buffer-to-typedarray.mdx +16 -0
- package/docs/guides/binary/dataview-to-string.mdx +17 -0
- package/docs/guides/binary/typedarray-to-arraybuffer.mdx +27 -0
- package/docs/guides/binary/typedarray-to-blob.mdx +18 -0
- package/docs/guides/binary/typedarray-to-buffer.mdx +16 -0
- package/docs/guides/binary/typedarray-to-dataview.mdx +16 -0
- package/docs/guides/binary/typedarray-to-readablestream.mdx +43 -0
- package/docs/guides/binary/typedarray-to-string.mdx +18 -0
- package/docs/guides/deployment/aws-lambda.mdx +204 -0
- package/docs/guides/deployment/digital-ocean.mdx +161 -0
- package/docs/guides/deployment/google-cloud-run.mdx +197 -0
- package/docs/guides/deployment/railway.mdx +145 -0
- package/docs/guides/deployment/render.mdx +82 -0
- package/docs/guides/deployment/vercel.mdx +99 -0
- package/docs/guides/ecosystem/astro.mdx +82 -0
- package/docs/guides/ecosystem/discordjs.mdx +80 -0
- package/docs/guides/ecosystem/docker.mdx +151 -0
- package/docs/guides/ecosystem/drizzle.mdx +195 -0
- package/docs/guides/ecosystem/edgedb.mdx +257 -0
- package/docs/guides/ecosystem/elysia.mdx +31 -0
- package/docs/guides/ecosystem/express.mdx +43 -0
- package/docs/guides/ecosystem/hono.mdx +47 -0
- package/docs/guides/ecosystem/mongoose.mdx +92 -0
- package/docs/guides/ecosystem/neon-drizzle.mdx +234 -0
- package/docs/guides/ecosystem/neon-serverless-postgres.mdx +60 -0
- package/docs/guides/ecosystem/nextjs.mdx +57 -0
- package/docs/guides/ecosystem/nuxt.mdx +90 -0
- package/docs/guides/ecosystem/pm2.mdx +55 -0
- package/docs/guides/ecosystem/prisma-postgres.mdx +169 -0
- package/docs/guides/ecosystem/prisma.mdx +164 -0
- package/docs/guides/ecosystem/qwik.mdx +114 -0
- package/docs/guides/ecosystem/react.mdx +52 -0
- package/docs/guides/ecosystem/remix.mdx +97 -0
- package/docs/guides/ecosystem/sentry.mdx +54 -0
- package/docs/guides/ecosystem/solidstart.mdx +66 -0
- package/docs/guides/ecosystem/ssr-react.mdx +49 -0
- package/docs/guides/ecosystem/stric.mdx +54 -0
- package/docs/guides/ecosystem/sveltekit.mdx +138 -0
- package/docs/guides/ecosystem/systemd.mdx +114 -0
- package/docs/guides/ecosystem/upstash.mdx +87 -0
- package/docs/guides/ecosystem/vite.mdx +77 -0
- package/docs/guides/html-rewriter/extract-links.mdx +72 -0
- package/docs/guides/html-rewriter/extract-social-meta.mdx +97 -0
- package/docs/guides/http/cluster.mdx +69 -0
- package/docs/guides/http/fetch-unix.mdx +35 -0
- package/docs/guides/http/fetch.mdx +26 -0
- package/docs/guides/http/file-uploads.mdx +97 -0
- package/docs/guides/http/hot.mdx +28 -0
- package/docs/guides/http/proxy.mdx +26 -0
- package/docs/guides/http/server.mdx +48 -0
- package/docs/guides/http/simple.mdx +20 -0
- package/docs/guides/http/stream-file.mdx +50 -0
- package/docs/guides/http/stream-iterator.mdx +49 -0
- package/docs/guides/http/stream-node-streams-in-bun.mdx +22 -0
- package/docs/guides/http/tls.mdx +32 -0
- package/docs/guides/index.mdx +10 -0
- package/docs/guides/install/add-dev.mdx +28 -0
- package/docs/guides/install/add-git.mdx +38 -0
- package/docs/guides/install/add-optional.mdx +27 -0
- package/docs/guides/install/add-peer.mdx +45 -0
- package/docs/guides/install/add-tarball.mdx +35 -0
- package/docs/guides/install/add.mdx +44 -0
- package/docs/guides/install/azure-artifacts.mdx +76 -0
- package/docs/guides/install/cicd.mdx +43 -0
- package/docs/guides/install/custom-registry.mdx +32 -0
- package/docs/guides/install/from-npm-install-to-bun-install.mdx +230 -0
- package/docs/guides/install/git-diff-bun-lockfile.mdx +47 -0
- package/docs/guides/install/jfrog-artifactory.mdx +28 -0
- package/docs/guides/install/npm-alias.mdx +25 -0
- package/docs/guides/install/registry-scope.mdx +40 -0
- package/docs/guides/install/trusted.mdx +50 -0
- package/docs/guides/install/workspaces.mdx +70 -0
- package/docs/guides/install/yarnlock.mdx +50 -0
- package/docs/guides/process/argv.mdx +66 -0
- package/docs/guides/process/ctrl-c.mdx +18 -0
- package/docs/guides/process/ipc.mdx +69 -0
- package/docs/guides/process/nanoseconds.mdx +15 -0
- package/docs/guides/process/os-signals.mdx +41 -0
- package/docs/guides/process/spawn-stderr.mdx +34 -0
- package/docs/guides/process/spawn-stdout.mdx +28 -0
- package/docs/guides/process/spawn.mdx +43 -0
- package/docs/guides/process/stdin.mdx +62 -0
- package/docs/guides/read-file/arraybuffer.mdx +30 -0
- package/docs/guides/read-file/buffer.mdx +21 -0
- package/docs/guides/read-file/exists.mdx +18 -0
- package/docs/guides/read-file/json.mdx +19 -0
- package/docs/guides/read-file/mime.mdx +22 -0
- package/docs/guides/read-file/stream.mdx +28 -0
- package/docs/guides/read-file/string.mdx +24 -0
- package/docs/guides/read-file/uint8array.mdx +23 -0
- package/docs/guides/read-file/watch.mdx +66 -0
- package/docs/guides/runtime/build-time-constants.mdx +295 -0
- package/docs/guides/runtime/cicd.mdx +45 -0
- package/docs/guides/runtime/codesign-macos-executable.mdx +61 -0
- package/docs/guides/runtime/define-constant.mdx +149 -0
- package/docs/guides/runtime/delete-directory.mdx +39 -0
- package/docs/guides/runtime/delete-file.mdx +21 -0
- package/docs/guides/runtime/heap-snapshot.mdx +28 -0
- package/docs/guides/runtime/import-html.mdx +17 -0
- package/docs/guides/runtime/import-json.mdx +46 -0
- package/docs/guides/runtime/import-toml.mdx +32 -0
- package/docs/guides/runtime/import-yaml.mdx +104 -0
- package/docs/guides/runtime/read-env.mdx +37 -0
- package/docs/guides/runtime/set-env.mdx +51 -0
- package/docs/guides/runtime/shell.mdx +42 -0
- package/docs/guides/runtime/timezone.mdx +38 -0
- package/docs/guides/runtime/tsconfig-paths.mdx +31 -0
- package/docs/guides/runtime/typescript.mdx +51 -0
- package/docs/guides/runtime/vscode-debugger.mdx +48 -0
- package/docs/guides/runtime/web-debugger.mdx +103 -0
- package/docs/guides/streams/node-readable-to-arraybuffer.mdx +13 -0
- package/docs/guides/streams/node-readable-to-blob.mdx +13 -0
- package/docs/guides/streams/node-readable-to-json.mdx +14 -0
- package/docs/guides/streams/node-readable-to-string.mdx +14 -0
- package/docs/guides/streams/node-readable-to-uint8array.mdx +13 -0
- package/docs/guides/streams/to-array.mdx +16 -0
- package/docs/guides/streams/to-arraybuffer.mdx +16 -0
- package/docs/guides/streams/to-blob.mdx +16 -0
- package/docs/guides/streams/to-buffer.mdx +17 -0
- package/docs/guides/streams/to-json.mdx +16 -0
- package/docs/guides/streams/to-string.mdx +16 -0
- package/docs/guides/streams/to-typedarray.mdx +24 -0
- package/docs/guides/test/bail.mdx +24 -0
- package/docs/guides/test/coverage-threshold.mdx +67 -0
- package/docs/guides/test/coverage.mdx +49 -0
- package/docs/guides/test/happy-dom.mdx +73 -0
- package/docs/guides/test/migrate-from-jest.mdx +125 -0
- package/docs/guides/test/mock-clock.mdx +50 -0
- package/docs/guides/test/mock-functions.mdx +70 -0
- package/docs/guides/test/rerun-each.mdx +16 -0
- package/docs/guides/test/run-tests.mdx +116 -0
- package/docs/guides/test/skip-tests.mdx +43 -0
- package/docs/guides/test/snapshot.mdx +102 -0
- package/docs/guides/test/spy-on.mdx +49 -0
- package/docs/guides/test/svelte-test.mdx +113 -0
- package/docs/guides/test/testing-library.mdx +93 -0
- package/docs/guides/test/timeout.mdx +17 -0
- package/docs/guides/test/todo-tests.mdx +74 -0
- package/docs/guides/test/update-snapshots.mdx +49 -0
- package/docs/guides/test/watch-mode.mdx +24 -0
- package/docs/guides/util/base64.mdx +17 -0
- package/docs/guides/util/deep-equals.mdx +41 -0
- package/docs/guides/util/deflate.mdx +20 -0
- package/docs/guides/util/detect-bun.mdx +25 -0
- package/docs/guides/util/entrypoint.mdx +19 -0
- package/docs/guides/util/escape-html.mdx +24 -0
- package/docs/guides/util/file-url-to-path.mdx +16 -0
- package/docs/guides/util/gzip.mdx +20 -0
- package/docs/guides/util/hash-a-password.mdx +56 -0
- package/docs/guides/util/import-meta-dir.mdx +15 -0
- package/docs/guides/util/import-meta-file.mdx +15 -0
- package/docs/guides/util/import-meta-path.mdx +15 -0
- package/docs/guides/util/javascript-uuid.mdx +25 -0
- package/docs/guides/util/main.mdx +43 -0
- package/docs/guides/util/path-to-file-url.mdx +16 -0
- package/docs/guides/util/sleep.mdx +24 -0
- package/docs/guides/util/version.mdx +23 -0
- package/docs/guides/util/which-path-to-executable-bin.mdx +17 -0
- package/docs/guides/websocket/compression.mdx +33 -0
- package/docs/guides/websocket/context.mdx +74 -0
- package/docs/guides/websocket/pubsub.mdx +40 -0
- package/docs/guides/websocket/simple.mdx +35 -0
- package/docs/guides/write-file/append.mdx +54 -0
- package/docs/guides/write-file/basic.mdx +46 -0
- package/docs/guides/write-file/blob.mdx +30 -0
- package/docs/guides/write-file/cat.mdx +19 -0
- package/docs/guides/write-file/file-cp.mdx +18 -0
- package/docs/guides/write-file/filesink.mdx +54 -0
- package/docs/guides/write-file/response.mdx +19 -0
- package/docs/guides/write-file/stdout.mdx +23 -0
- package/docs/guides/write-file/stream.mdx +19 -0
- package/docs/guides/write-file/unlink.mdx +18 -0
- package/docs/index.mdx +133 -0
- package/docs/installation.mdx +365 -0
- package/docs/pm/bunx.mdx +83 -0
- package/docs/pm/catalogs.mdx +292 -0
- package/docs/pm/cli/add.mdx +179 -0
- package/docs/pm/cli/audit.mdx +60 -0
- package/docs/pm/cli/install.mdx +471 -0
- package/docs/pm/cli/link.mdx +48 -0
- package/docs/pm/cli/outdated.mdx +197 -0
- package/docs/pm/cli/patch.mdx +69 -0
- package/docs/pm/cli/pm.mdx +319 -0
- package/docs/pm/cli/publish.mdx +123 -0
- package/docs/pm/cli/remove.mdx +16 -0
- package/docs/pm/cli/update.mdx +140 -0
- package/docs/pm/cli/why.mdx +84 -0
- package/docs/pm/filter.mdx +102 -0
- package/docs/pm/global-cache.mdx +72 -0
- package/docs/pm/isolated-installs.mdx +205 -0
- package/docs/pm/lifecycle.mdx +57 -0
- package/docs/pm/lockfile.mdx +64 -0
- package/docs/pm/npmrc.mdx +111 -0
- package/docs/pm/overrides.mdx +83 -0
- package/docs/pm/scopes-registries.mdx +35 -0
- package/docs/pm/security-scanner-api.mdx +95 -0
- package/docs/pm/workspaces.mdx +109 -0
- package/docs/project/benchmarking.mdx +218 -0
- package/docs/project/bindgen.mdx +223 -0
- package/docs/project/building-windows.mdx +133 -0
- package/docs/project/contributing.mdx +343 -0
- package/docs/project/feedback.mdx +20 -0
- package/docs/project/license.mdx +78 -0
- package/docs/project/roadmap.mdx +8 -0
- package/docs/quickstart.mdx +240 -0
- package/docs/runtime/auto-install.mdx +97 -0
- package/docs/runtime/binary-data.mdx +846 -0
- package/docs/runtime/bun-apis.mdx +59 -0
- package/docs/runtime/bunfig.mdx +642 -0
- package/docs/runtime/c-compiler.mdx +204 -0
- package/docs/runtime/child-process.mdx +532 -0
- package/docs/runtime/color.mdx +267 -0
- package/docs/runtime/console.mdx +67 -0
- package/docs/runtime/cookies.mdx +454 -0
- package/docs/runtime/debugger.mdx +335 -0
- package/docs/runtime/environment-variables.mdx +214 -0
- package/docs/runtime/ffi.mdx +565 -0
- package/docs/runtime/file-io.mdx +306 -0
- package/docs/runtime/file-system-router.mdx +118 -0
- package/docs/runtime/file-types.mdx +354 -0
- package/docs/runtime/glob.mdx +181 -0
- package/docs/runtime/globals.mdx +72 -0
- package/docs/runtime/hashing.mdx +315 -0
- package/docs/runtime/html-rewriter.mdx +340 -0
- package/docs/runtime/http/cookies.mdx +79 -0
- package/docs/runtime/http/error-handling.mdx +40 -0
- package/docs/runtime/http/metrics.mdx +36 -0
- package/docs/runtime/http/routing.mdx +289 -0
- package/docs/runtime/http/server.mdx +647 -0
- package/docs/runtime/http/tls.mdx +101 -0
- package/docs/runtime/http/websockets.mdx +404 -0
- package/docs/runtime/index.mdx +223 -0
- package/docs/runtime/jsx.mdx +115 -0
- package/docs/runtime/module-resolution.mdx +342 -0
- package/docs/runtime/networking/dns.mdx +111 -0
- package/docs/runtime/networking/fetch.mdx +468 -0
- package/docs/runtime/networking/tcp.mdx +239 -0
- package/docs/runtime/networking/udp.mdx +129 -0
- package/docs/runtime/node-api.mdx +19 -0
- package/docs/runtime/nodejs-compat.mdx +468 -0
- package/docs/runtime/plugins.mdx +405 -0
- package/docs/runtime/redis.mdx +582 -0
- package/docs/runtime/s3.mdx +863 -0
- package/docs/runtime/secrets.mdx +336 -0
- package/docs/runtime/semver.mdx +57 -0
- package/docs/runtime/shell.mdx +637 -0
- package/docs/runtime/sql.mdx +1404 -0
- package/docs/runtime/sqlite.mdx +699 -0
- package/docs/runtime/streams.mdx +232 -0
- package/docs/runtime/templating/create.mdx +269 -0
- package/docs/runtime/templating/init.mdx +58 -0
- package/docs/runtime/transpiler.mdx +288 -0
- package/docs/runtime/typescript.mdx +58 -0
- package/docs/runtime/utils.mdx +922 -0
- package/docs/runtime/watch-mode.mdx +161 -0
- package/docs/runtime/web-apis.mdx +29 -0
- package/docs/runtime/workers.mdx +328 -0
- package/docs/runtime/yaml.mdx +469 -0
- package/docs/snippets/cli/add.mdx +166 -0
- package/docs/snippets/cli/build.mdx +196 -0
- package/docs/snippets/cli/feedback.mdx +17 -0
- package/docs/snippets/cli/init.mdx +84 -0
- package/docs/snippets/cli/install.mdx +173 -0
- package/docs/snippets/cli/link.mdx +163 -0
- package/docs/snippets/cli/outdated.mdx +140 -0
- package/docs/snippets/cli/patch.mdx +171 -0
- package/docs/snippets/cli/publish.mdx +198 -0
- package/docs/snippets/cli/remove.mdx +146 -0
- package/docs/snippets/cli/run.mdx +293 -0
- package/docs/snippets/cli/test.mdx +100 -0
- package/docs/snippets/cli/update.mdx +144 -0
- package/docs/snippets/product-card.mdx +32 -0
- package/docs/snippets/product-tiles.mdx +94 -0
- package/docs/test/code-coverage.mdx +409 -0
- package/docs/test/configuration.mdx +467 -0
- package/docs/test/dates-times.mdx +129 -0
- package/docs/test/discovery.mdx +90 -0
- package/docs/test/dom.mdx +226 -0
- package/docs/test/index.mdx +380 -0
- package/docs/test/lifecycle.mdx +348 -0
- package/docs/test/mocks.mdx +637 -0
- package/docs/test/reporters.mdx +117 -0
- package/docs/test/runtime-behavior.mdx +342 -0
- package/docs/test/snapshots.mdx +434 -0
- package/docs/test/writing-tests.mdx +635 -0
- package/docs/typescript.mdx +54 -0
- package/package.json +8 -6
- package/test.d.ts +2 -2
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Test configuration"
|
|
3
|
+
description: "Learn how to configure Bun test behavior using bunfig.toml and command-line options"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Configure `bun test` via `bunfig.toml` file and command-line options. This page documents the available configuration options for `bun test`.
|
|
7
|
+
|
|
8
|
+
## Configuration File
|
|
9
|
+
|
|
10
|
+
You can configure `bun test` behavior by adding a `[test]` section to your `bunfig.toml` file:
|
|
11
|
+
|
|
12
|
+
```toml title="bunfig.toml" icon="settings"
|
|
13
|
+
[test]
|
|
14
|
+
# Options go here
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Test Discovery
|
|
18
|
+
|
|
19
|
+
### root
|
|
20
|
+
|
|
21
|
+
The `root` option specifies a root directory for test discovery, overriding the default behavior of scanning from the project root.
|
|
22
|
+
|
|
23
|
+
```toml title="bunfig.toml" icon="settings"
|
|
24
|
+
[test]
|
|
25
|
+
root = "src" # Only scan for tests in the src directory
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
This is useful when you want to:
|
|
29
|
+
|
|
30
|
+
- Limit test discovery to specific directories
|
|
31
|
+
- Exclude certain parts of your project from test scanning
|
|
32
|
+
- Organize tests in a specific subdirectory structure
|
|
33
|
+
|
|
34
|
+
#### Examples
|
|
35
|
+
|
|
36
|
+
```toml title="bunfig.toml" icon="settings"
|
|
37
|
+
[test]
|
|
38
|
+
# Only run tests in the src directory
|
|
39
|
+
root = "src"
|
|
40
|
+
|
|
41
|
+
# Run tests in a specific test directory
|
|
42
|
+
root = "tests"
|
|
43
|
+
|
|
44
|
+
# Run tests in multiple specific directories (not currently supported - use patterns instead)
|
|
45
|
+
# root = ["src", "lib"] # This syntax is not supported
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Preload Scripts
|
|
49
|
+
|
|
50
|
+
Load scripts before running tests using the `preload` option:
|
|
51
|
+
|
|
52
|
+
```toml title="bunfig.toml" icon="settings"
|
|
53
|
+
[test]
|
|
54
|
+
preload = ["./test-setup.ts", "./global-mocks.ts"]
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
This is equivalent to using `--preload` on the command line:
|
|
58
|
+
|
|
59
|
+
```bash terminal icon="terminal"
|
|
60
|
+
bun test --preload ./test-setup.ts --preload ./global-mocks.ts
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
#### Common Preload Use Cases
|
|
64
|
+
|
|
65
|
+
```ts title="test-setup.ts" icon="/icons/typescript.svg"
|
|
66
|
+
// Global test setup
|
|
67
|
+
import { beforeAll, afterAll } from "bun:test";
|
|
68
|
+
|
|
69
|
+
beforeAll(() => {
|
|
70
|
+
// Set up test database
|
|
71
|
+
setupTestDatabase();
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
afterAll(() => {
|
|
75
|
+
// Clean up
|
|
76
|
+
cleanupTestDatabase();
|
|
77
|
+
});
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
```ts title="global-mocks.ts" icon="/icons/typescript.svg"
|
|
81
|
+
// Global mocks
|
|
82
|
+
import { mock } from "bun:test";
|
|
83
|
+
|
|
84
|
+
// Mock environment variables
|
|
85
|
+
process.env.NODE_ENV = "test";
|
|
86
|
+
process.env.API_URL = "http://localhost:3001";
|
|
87
|
+
|
|
88
|
+
// Mock external dependencies
|
|
89
|
+
mock.module("./external-api", () => ({
|
|
90
|
+
fetchData: mock(() => Promise.resolve({ data: "test" })),
|
|
91
|
+
}));
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Timeouts
|
|
95
|
+
|
|
96
|
+
### Default Timeout
|
|
97
|
+
|
|
98
|
+
Set the default timeout for all tests:
|
|
99
|
+
|
|
100
|
+
```toml title="bunfig.toml" icon="settings"
|
|
101
|
+
[test]
|
|
102
|
+
timeout = 10000 # 10 seconds (default is 5000ms)
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
This applies to all tests unless overridden by individual test timeouts:
|
|
106
|
+
|
|
107
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
108
|
+
// This test will use the default timeout from bunfig.toml
|
|
109
|
+
test("uses default timeout", () => {
|
|
110
|
+
// test implementation
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
// This test overrides the default timeout
|
|
114
|
+
test("custom timeout", () => {
|
|
115
|
+
// test implementation
|
|
116
|
+
}, 30000); // 30 seconds
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Reporters
|
|
120
|
+
|
|
121
|
+
### JUnit Reporter
|
|
122
|
+
|
|
123
|
+
Configure the JUnit reporter output file path directly in the config file:
|
|
124
|
+
|
|
125
|
+
```toml title="bunfig.toml" icon="settings"
|
|
126
|
+
[test.reporter]
|
|
127
|
+
junit = "path/to/junit.xml" # Output path for JUnit XML report
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
This complements the `--reporter=junit` and `--reporter-outfile` CLI flags:
|
|
131
|
+
|
|
132
|
+
```bash terminal icon="terminal"
|
|
133
|
+
# Equivalent command line usage
|
|
134
|
+
bun test --reporter=junit --reporter-outfile=./junit.xml
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
#### Multiple Reporters
|
|
138
|
+
|
|
139
|
+
You can use multiple reporters simultaneously:
|
|
140
|
+
|
|
141
|
+
```bash terminal icon="terminal"
|
|
142
|
+
# CLI approach
|
|
143
|
+
bun test --reporter=junit --reporter-outfile=./junit.xml
|
|
144
|
+
|
|
145
|
+
# Config file approach
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
```toml title="bunfig.toml" icon="settings"
|
|
149
|
+
[test.reporter]
|
|
150
|
+
junit = "./reports/junit.xml"
|
|
151
|
+
|
|
152
|
+
[test]
|
|
153
|
+
# Also enable coverage reporting
|
|
154
|
+
coverage = true
|
|
155
|
+
coverageReporter = ["text", "lcov"]
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Memory Usage
|
|
159
|
+
|
|
160
|
+
### smol Mode
|
|
161
|
+
|
|
162
|
+
Enable the `--smol` memory-saving mode specifically for the test runner:
|
|
163
|
+
|
|
164
|
+
```toml title="bunfig.toml" icon="settings"
|
|
165
|
+
[test]
|
|
166
|
+
smol = true # Reduce memory usage during test runs
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
This is equivalent to using the `--smol` flag on the command line:
|
|
170
|
+
|
|
171
|
+
```bash terminal icon="terminal"
|
|
172
|
+
bun test --smol
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
The `smol` mode reduces memory usage by:
|
|
176
|
+
|
|
177
|
+
- Using less memory for the JavaScript heap
|
|
178
|
+
- Being more aggressive about garbage collection
|
|
179
|
+
- Reducing buffer sizes where possible
|
|
180
|
+
|
|
181
|
+
This is useful for:
|
|
182
|
+
|
|
183
|
+
- CI environments with limited memory
|
|
184
|
+
- Large test suites that consume significant memory
|
|
185
|
+
- Development environments with memory constraints
|
|
186
|
+
|
|
187
|
+
## Coverage Options
|
|
188
|
+
|
|
189
|
+
### Basic Coverage Settings
|
|
190
|
+
|
|
191
|
+
```toml title="bunfig.toml" icon="settings"
|
|
192
|
+
[test]
|
|
193
|
+
# Enable coverage by default
|
|
194
|
+
coverage = true
|
|
195
|
+
|
|
196
|
+
# Set coverage reporter
|
|
197
|
+
coverageReporter = ["text", "lcov"]
|
|
198
|
+
|
|
199
|
+
# Set coverage output directory
|
|
200
|
+
coverageDir = "./coverage"
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Skip Test Files from Coverage
|
|
204
|
+
|
|
205
|
+
Exclude files matching test patterns (e.g., `*.test.ts`) from the coverage report:
|
|
206
|
+
|
|
207
|
+
```toml title="bunfig.toml" icon="settings"
|
|
208
|
+
[test]
|
|
209
|
+
coverageSkipTestFiles = true # Exclude test files from coverage reports
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Coverage Thresholds
|
|
213
|
+
|
|
214
|
+
The coverage threshold can be specified either as a number or as an object with specific thresholds:
|
|
215
|
+
|
|
216
|
+
```toml title="bunfig.toml" icon="settings"
|
|
217
|
+
[test]
|
|
218
|
+
# Simple threshold - applies to lines, functions, and statements
|
|
219
|
+
coverageThreshold = 0.8
|
|
220
|
+
|
|
221
|
+
# Detailed thresholds
|
|
222
|
+
coverageThreshold = { lines = 0.9, functions = 0.8, statements = 0.85 }
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Setting any of these enables `fail_on_low_coverage`, causing the test run to fail if coverage is below the threshold.
|
|
226
|
+
|
|
227
|
+
#### Threshold Examples
|
|
228
|
+
|
|
229
|
+
```toml title="bunfig.toml" icon="settings"
|
|
230
|
+
[test]
|
|
231
|
+
# Require 90% coverage across the board
|
|
232
|
+
coverageThreshold = 0.9
|
|
233
|
+
|
|
234
|
+
# Different requirements for different metrics
|
|
235
|
+
coverageThreshold = {
|
|
236
|
+
lines = 0.85, # 85% line coverage
|
|
237
|
+
functions = 0.90, # 90% function coverage
|
|
238
|
+
statements = 0.80 # 80% statement coverage
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Coverage Path Ignore Patterns
|
|
243
|
+
|
|
244
|
+
Exclude specific files or file patterns from coverage reports using glob patterns:
|
|
245
|
+
|
|
246
|
+
```toml title="bunfig.toml" icon="settings"
|
|
247
|
+
[test]
|
|
248
|
+
# Single pattern
|
|
249
|
+
coveragePathIgnorePatterns = "**/*.spec.ts"
|
|
250
|
+
|
|
251
|
+
# Multiple patterns
|
|
252
|
+
coveragePathIgnorePatterns = [
|
|
253
|
+
"**/*.spec.ts",
|
|
254
|
+
"**/*.test.ts",
|
|
255
|
+
"src/utils/**",
|
|
256
|
+
"*.config.js",
|
|
257
|
+
"generated/**",
|
|
258
|
+
"vendor/**"
|
|
259
|
+
]
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Files matching any of these patterns will be excluded from coverage calculation and reporting. See the [coverage documentation](/test/code-coverage) for more details and examples.
|
|
263
|
+
|
|
264
|
+
#### Common Ignore Patterns
|
|
265
|
+
|
|
266
|
+
```toml title="bunfig.toml" icon="settings"
|
|
267
|
+
[test]
|
|
268
|
+
coveragePathIgnorePatterns = [
|
|
269
|
+
# Test files
|
|
270
|
+
"**/*.test.ts",
|
|
271
|
+
"**/*.spec.ts",
|
|
272
|
+
"**/*.e2e.ts",
|
|
273
|
+
|
|
274
|
+
# Configuration files
|
|
275
|
+
"*.config.js",
|
|
276
|
+
"*.config.ts",
|
|
277
|
+
"webpack.config.*",
|
|
278
|
+
"vite.config.*",
|
|
279
|
+
|
|
280
|
+
# Build output
|
|
281
|
+
"dist/**",
|
|
282
|
+
"build/**",
|
|
283
|
+
".next/**",
|
|
284
|
+
|
|
285
|
+
# Generated code
|
|
286
|
+
"generated/**",
|
|
287
|
+
"**/*.generated.ts",
|
|
288
|
+
|
|
289
|
+
# Vendor/third-party
|
|
290
|
+
"vendor/**",
|
|
291
|
+
"third-party/**",
|
|
292
|
+
|
|
293
|
+
# Utilities that don't need testing
|
|
294
|
+
"src/utils/constants.ts",
|
|
295
|
+
"src/types/**"
|
|
296
|
+
]
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Sourcemap Handling
|
|
300
|
+
|
|
301
|
+
Internally, Bun transpiles every file. That means code coverage must also go through sourcemaps before they can be reported. We expose this as a flag to allow you to opt out of this behavior, but it will be confusing because during the transpilation process, Bun may move code around and change variable names. This option is mostly useful for debugging coverage issues.
|
|
302
|
+
|
|
303
|
+
```toml title="bunfig.toml" icon="settings"
|
|
304
|
+
[test]
|
|
305
|
+
coverageIgnoreSourcemaps = true # Don't use sourcemaps for coverage analysis
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
<Warning>
|
|
309
|
+
When using this option, you probably want to stick a `// @bun` comment at the top of the source file to opt out of the
|
|
310
|
+
transpilation process.
|
|
311
|
+
</Warning>
|
|
312
|
+
|
|
313
|
+
## Install Settings Inheritance
|
|
314
|
+
|
|
315
|
+
The `bun test` command inherits relevant network and installation configuration (registry, cafile, prefer, exact, etc.) from the `[install]` section of `bunfig.toml`. This is important if tests need to interact with private registries or require specific install behaviors triggered during the test run.
|
|
316
|
+
|
|
317
|
+
```toml title="bunfig.toml" icon="settings"
|
|
318
|
+
[install]
|
|
319
|
+
# These settings are inherited by bun test
|
|
320
|
+
registry = "https://npm.company.com/"
|
|
321
|
+
exact = true
|
|
322
|
+
prefer = "offline"
|
|
323
|
+
|
|
324
|
+
[test]
|
|
325
|
+
# Test-specific configuration
|
|
326
|
+
coverage = true
|
|
327
|
+
timeout = 10000
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
## Environment Variables
|
|
331
|
+
|
|
332
|
+
You can also set environment variables in your configuration that affect test behavior:
|
|
333
|
+
|
|
334
|
+
```toml title="bunfig.toml" icon="settings"
|
|
335
|
+
[env]
|
|
336
|
+
NODE_ENV = "test"
|
|
337
|
+
DATABASE_URL = "postgresql://localhost:5432/test_db"
|
|
338
|
+
LOG_LEVEL = "error"
|
|
339
|
+
|
|
340
|
+
[test]
|
|
341
|
+
coverage = true
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
## Complete Configuration Example
|
|
345
|
+
|
|
346
|
+
Here's a comprehensive example showing all available test configuration options:
|
|
347
|
+
|
|
348
|
+
```toml title="bunfig.toml" icon="settings"
|
|
349
|
+
[install]
|
|
350
|
+
# Install settings inherited by tests
|
|
351
|
+
registry = "https://registry.npmjs.org/"
|
|
352
|
+
exact = true
|
|
353
|
+
|
|
354
|
+
[env]
|
|
355
|
+
# Environment variables for tests
|
|
356
|
+
NODE_ENV = "test"
|
|
357
|
+
DATABASE_URL = "postgresql://localhost:5432/test_db"
|
|
358
|
+
API_URL = "http://localhost:3001"
|
|
359
|
+
LOG_LEVEL = "error"
|
|
360
|
+
|
|
361
|
+
[test]
|
|
362
|
+
# Test discovery
|
|
363
|
+
root = "src"
|
|
364
|
+
preload = ["./test-setup.ts", "./global-mocks.ts"]
|
|
365
|
+
|
|
366
|
+
# Execution settings
|
|
367
|
+
timeout = 10000
|
|
368
|
+
smol = true
|
|
369
|
+
|
|
370
|
+
# Coverage configuration
|
|
371
|
+
coverage = true
|
|
372
|
+
coverageReporter = ["text", "lcov"]
|
|
373
|
+
coverageDir = "./coverage"
|
|
374
|
+
coverageThreshold = { lines = 0.85, functions = 0.90, statements = 0.80 }
|
|
375
|
+
coverageSkipTestFiles = true
|
|
376
|
+
coveragePathIgnorePatterns = [
|
|
377
|
+
"**/*.spec.ts",
|
|
378
|
+
"src/utils/**",
|
|
379
|
+
"*.config.js",
|
|
380
|
+
"generated/**"
|
|
381
|
+
]
|
|
382
|
+
|
|
383
|
+
# Advanced coverage settings
|
|
384
|
+
coverageIgnoreSourcemaps = false
|
|
385
|
+
|
|
386
|
+
# Reporter configuration
|
|
387
|
+
[test.reporter]
|
|
388
|
+
junit = "./reports/junit.xml"
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
## CLI Override Behavior
|
|
392
|
+
|
|
393
|
+
Command-line options always override configuration file settings:
|
|
394
|
+
|
|
395
|
+
```toml title="bunfig.toml" icon="settings"
|
|
396
|
+
[test]
|
|
397
|
+
timeout = 5000
|
|
398
|
+
coverage = false
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
```bash terminal icon="terminal"
|
|
402
|
+
# These CLI flags override the config file
|
|
403
|
+
bun test --timeout 10000 --coverage
|
|
404
|
+
# timeout will be 10000ms and coverage will be enabled
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
## Conditional Configuration
|
|
408
|
+
|
|
409
|
+
You can use different configurations for different environments:
|
|
410
|
+
|
|
411
|
+
```toml title="bunfig.toml" icon="settings"
|
|
412
|
+
[test]
|
|
413
|
+
# Default test configuration
|
|
414
|
+
coverage = false
|
|
415
|
+
timeout = 5000
|
|
416
|
+
|
|
417
|
+
# Override for CI environment
|
|
418
|
+
[test.ci]
|
|
419
|
+
coverage = true
|
|
420
|
+
coverageThreshold = 0.8
|
|
421
|
+
timeout = 30000
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
Then in CI:
|
|
425
|
+
|
|
426
|
+
```bash terminal icon="terminal"
|
|
427
|
+
# Use CI-specific settings
|
|
428
|
+
bun test --config=ci
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
## Validation and Troubleshooting
|
|
432
|
+
|
|
433
|
+
### Invalid Configuration
|
|
434
|
+
|
|
435
|
+
Bun will warn about invalid configuration options:
|
|
436
|
+
|
|
437
|
+
```toml title="bunfig.toml" icon="settings"
|
|
438
|
+
[test]
|
|
439
|
+
invalidOption = true # This will generate a warning
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
### Common Configuration Issues
|
|
443
|
+
|
|
444
|
+
1. **Path Resolution**: Relative paths in config are resolved relative to the config file location
|
|
445
|
+
2. **Pattern Matching**: Glob patterns use standard glob syntax
|
|
446
|
+
3. **Type Mismatches**: Ensure numeric values are not quoted unless they should be strings
|
|
447
|
+
|
|
448
|
+
```toml title="bunfig.toml" icon="settings"
|
|
449
|
+
[test]
|
|
450
|
+
# Correct
|
|
451
|
+
timeout = 10000
|
|
452
|
+
|
|
453
|
+
# Incorrect - will be treated as string
|
|
454
|
+
timeout = "10000"
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
### Debugging Configuration
|
|
458
|
+
|
|
459
|
+
To see what configuration is being used:
|
|
460
|
+
|
|
461
|
+
```bash terminal icon="terminal"
|
|
462
|
+
# Show effective configuration
|
|
463
|
+
bun test --dry-run
|
|
464
|
+
|
|
465
|
+
# Verbose output to see configuration loading
|
|
466
|
+
bun test --verbose
|
|
467
|
+
```
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Dates and times"
|
|
3
|
+
description: "Learn how to manipulate time and dates in your Bun tests using setSystemTime and Jest compatibility functions"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
`bun:test` lets you change what time it is in your tests.
|
|
7
|
+
|
|
8
|
+
This works with any of the following:
|
|
9
|
+
|
|
10
|
+
- `Date.now`
|
|
11
|
+
- `new Date()`
|
|
12
|
+
- `new Intl.DateTimeFormat().format()`
|
|
13
|
+
|
|
14
|
+
<Note>Timers are not impacted yet, but may be in a future release of Bun.</Note>
|
|
15
|
+
|
|
16
|
+
## setSystemTime
|
|
17
|
+
|
|
18
|
+
To change the system time, use `setSystemTime`:
|
|
19
|
+
|
|
20
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
21
|
+
import { setSystemTime, beforeAll, test, expect } from "bun:test";
|
|
22
|
+
|
|
23
|
+
beforeAll(() => {
|
|
24
|
+
setSystemTime(new Date("2020-01-01T00:00:00.000Z"));
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test("it is 2020", () => {
|
|
28
|
+
expect(new Date().getFullYear()).toBe(2020);
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
To support existing tests that use Jest's `useFakeTimers` and `useRealTimers`, you can use `useFakeTimers` and `useRealTimers`:
|
|
33
|
+
|
|
34
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
35
|
+
test("just like in jest", () => {
|
|
36
|
+
jest.useFakeTimers();
|
|
37
|
+
jest.setSystemTime(new Date("2020-01-01T00:00:00.000Z"));
|
|
38
|
+
expect(new Date().getFullYear()).toBe(2020);
|
|
39
|
+
jest.useRealTimers();
|
|
40
|
+
expect(new Date().getFullYear()).toBeGreaterThan(2020);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test("unlike in jest", () => {
|
|
44
|
+
const OriginalDate = Date;
|
|
45
|
+
jest.useFakeTimers();
|
|
46
|
+
if (typeof Bun === "undefined") {
|
|
47
|
+
// In Jest, the Date constructor changes
|
|
48
|
+
// That can cause all sorts of bugs because suddenly Date !== Date before the test.
|
|
49
|
+
expect(Date).not.toBe(OriginalDate);
|
|
50
|
+
expect(Date.now).not.toBe(OriginalDate.now);
|
|
51
|
+
} else {
|
|
52
|
+
// In bun:test, Date constructor does not change when you useFakeTimers
|
|
53
|
+
expect(Date).toBe(OriginalDate);
|
|
54
|
+
expect(Date.now).toBe(OriginalDate.now);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
<Warning>
|
|
60
|
+
**Timers** — Note that we have not implemented builtin support for mocking timers yet, but this is on the roadmap.
|
|
61
|
+
</Warning>
|
|
62
|
+
|
|
63
|
+
## Reset the system time
|
|
64
|
+
|
|
65
|
+
To reset the system time, pass no arguments to `setSystemTime`:
|
|
66
|
+
|
|
67
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
68
|
+
import { setSystemTime, expect, test } from "bun:test";
|
|
69
|
+
|
|
70
|
+
test("it was 2020, for a moment.", () => {
|
|
71
|
+
// Set it to something!
|
|
72
|
+
setSystemTime(new Date("2020-01-01T00:00:00.000Z"));
|
|
73
|
+
expect(new Date().getFullYear()).toBe(2020);
|
|
74
|
+
|
|
75
|
+
// reset it!
|
|
76
|
+
setSystemTime();
|
|
77
|
+
|
|
78
|
+
expect(new Date().getFullYear()).toBeGreaterThan(2020);
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Get mocked time with jest.now()
|
|
83
|
+
|
|
84
|
+
When you're using mocked time (with `setSystemTime` or `useFakeTimers`), you can use `jest.now()` to get the current mocked timestamp:
|
|
85
|
+
|
|
86
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
87
|
+
import { test, expect, jest } from "bun:test";
|
|
88
|
+
|
|
89
|
+
test("get the current mocked time", () => {
|
|
90
|
+
jest.useFakeTimers();
|
|
91
|
+
jest.setSystemTime(new Date("2020-01-01T00:00:00.000Z"));
|
|
92
|
+
|
|
93
|
+
expect(Date.now()).toBe(1577836800000); // Jan 1, 2020 timestamp
|
|
94
|
+
expect(jest.now()).toBe(1577836800000); // Same value
|
|
95
|
+
|
|
96
|
+
jest.useRealTimers();
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
This is useful when you need to access the mocked time directly without creating a new Date object.
|
|
101
|
+
|
|
102
|
+
## Set the time zone
|
|
103
|
+
|
|
104
|
+
By default, the time zone for all `bun test` runs is set to UTC (`Etc/UTC`) unless overridden. To change the time zone, either pass the `$TZ` environment variable to `bun test`:
|
|
105
|
+
|
|
106
|
+
```bash terminal icon="terminal"
|
|
107
|
+
TZ=America/Los_Angeles bun test
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Or set `process.env.TZ` at runtime:
|
|
111
|
+
|
|
112
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
113
|
+
import { test, expect } from "bun:test";
|
|
114
|
+
|
|
115
|
+
test("Welcome to California!", () => {
|
|
116
|
+
process.env.TZ = "America/Los_Angeles";
|
|
117
|
+
expect(new Date().getTimezoneOffset()).toBe(420);
|
|
118
|
+
expect(new Intl.DateTimeFormat().resolvedOptions().timeZone).toBe("America/Los_Angeles");
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
test("Welcome to New York!", () => {
|
|
122
|
+
// Unlike in Jest, you can set the timezone multiple times at runtime and it will work.
|
|
123
|
+
process.env.TZ = "America/New_York";
|
|
124
|
+
expect(new Date().getTimezoneOffset()).toBe(240);
|
|
125
|
+
expect(new Intl.DateTimeFormat().resolvedOptions().timeZone).toBe("America/New_York");
|
|
126
|
+
});
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
<Info>Unlike in Jest, you can set the timezone multiple times at runtime and it will work.</Info>
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Finding tests"
|
|
3
|
+
description: "Learn how Bun's test runner discovers and filters test files in your project"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
bun test's file discovery mechanism determines which files to run as tests. Understanding how it works helps you structure your test files effectively.
|
|
7
|
+
|
|
8
|
+
## Default Discovery Logic
|
|
9
|
+
|
|
10
|
+
By default, `bun test` recursively searches the project directory for files that match specific patterns:
|
|
11
|
+
|
|
12
|
+
- `*.test.{js|jsx|ts|tsx}` - Files ending with `.test.js`, `.test.jsx`, `.test.ts`, or `.test.tsx`
|
|
13
|
+
- `*_test.{js|jsx|ts|tsx}` - Files ending with `_test.js`, `_test.jsx`, `_test.ts`, or `_test.tsx`
|
|
14
|
+
- `*.spec.{js|jsx|ts|tsx}` - Files ending with `.spec.js`, `.spec.jsx`, `.spec.ts`, or `.spec.tsx`
|
|
15
|
+
- `*_spec.{js|jsx|ts|tsx}` - Files ending with `_spec.js`, `_spec.jsx`, `_spec.ts`, or `_spec.tsx`
|
|
16
|
+
|
|
17
|
+
## Exclusions
|
|
18
|
+
|
|
19
|
+
By default, Bun test ignores:
|
|
20
|
+
|
|
21
|
+
- `node_modules` directories
|
|
22
|
+
- Hidden directories (those starting with a period `.`)
|
|
23
|
+
- Files that don't have JavaScript-like extensions (based on available loaders)
|
|
24
|
+
|
|
25
|
+
## Customizing Test Discovery
|
|
26
|
+
|
|
27
|
+
### Position Arguments as Filters
|
|
28
|
+
|
|
29
|
+
You can filter which test files run by passing additional positional arguments to `bun test`:
|
|
30
|
+
|
|
31
|
+
```bash terminal icon="terminal"
|
|
32
|
+
bun test <filter> <filter> ...
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Any test file with a path that contains one of the filters will run. These filters are simple substring matches, not glob patterns.
|
|
36
|
+
|
|
37
|
+
For example, to run all tests in a `utils` directory:
|
|
38
|
+
|
|
39
|
+
```bash terminal icon="terminal"
|
|
40
|
+
bun test utils
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
This would match files like `src/utils/string.test.ts` and `lib/utils/array_test.js`.
|
|
44
|
+
|
|
45
|
+
### Specifying Exact File Paths
|
|
46
|
+
|
|
47
|
+
To run a specific file in the test runner, make sure the path starts with `./` or `/` to distinguish it from a filter name:
|
|
48
|
+
|
|
49
|
+
```bash terminal icon="terminal"
|
|
50
|
+
bun test ./test/specific-file.test.ts
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Filter by Test Name
|
|
54
|
+
|
|
55
|
+
To filter tests by name rather than file path, use the `-t`/`--test-name-pattern` flag with a regex pattern:
|
|
56
|
+
|
|
57
|
+
```sh terminal icon="terminal"
|
|
58
|
+
# run all tests with "addition" in the name
|
|
59
|
+
bun test --test-name-pattern addition
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The pattern is matched against a concatenated string of the test name prepended with the labels of all its parent describe blocks, separated by spaces. For example, a test defined as:
|
|
63
|
+
|
|
64
|
+
```ts title="math.test.ts" icon="/icons/typescript.svg"
|
|
65
|
+
describe("Math", () => {
|
|
66
|
+
describe("operations", () => {
|
|
67
|
+
test("should add correctly", () => {
|
|
68
|
+
// ...
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Would be matched against the string "Math operations should add correctly".
|
|
75
|
+
|
|
76
|
+
### Changing the Root Directory
|
|
77
|
+
|
|
78
|
+
By default, Bun looks for test files starting from the current working directory. You can change this with the `root` option in your `bunfig.toml`:
|
|
79
|
+
|
|
80
|
+
```toml title="bunfig.toml" icon="settings"
|
|
81
|
+
[test]
|
|
82
|
+
root = "src" # Only scan for tests in the src directory
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Execution Order
|
|
86
|
+
|
|
87
|
+
Tests are run in the following order:
|
|
88
|
+
|
|
89
|
+
1. Test files are executed sequentially (not in parallel)
|
|
90
|
+
2. Within each file, tests run sequentially based on their definition order
|