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,348 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Lifecycle hooks"
|
|
3
|
+
description: "Learn how to use beforeAll, beforeEach, afterEach, and afterAll lifecycle hooks in Bun tests"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The test runner supports the following lifecycle hooks. This is useful for loading test fixtures, mocking data, and configuring the test environment.
|
|
7
|
+
|
|
8
|
+
| Hook | Description |
|
|
9
|
+
| ------------ | --------------------------- |
|
|
10
|
+
| `beforeAll` | Runs once before all tests. |
|
|
11
|
+
| `beforeEach` | Runs before each test. |
|
|
12
|
+
| `afterEach` | Runs after each test. |
|
|
13
|
+
| `afterAll` | Runs once after all tests. |
|
|
14
|
+
|
|
15
|
+
## Per-Test Setup and Teardown
|
|
16
|
+
|
|
17
|
+
Perform per-test setup and teardown logic with `beforeEach` and `afterEach`.
|
|
18
|
+
|
|
19
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
20
|
+
import { beforeEach, afterEach, test } from "bun:test";
|
|
21
|
+
|
|
22
|
+
beforeEach(() => {
|
|
23
|
+
console.log("running test.");
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
afterEach(() => {
|
|
27
|
+
console.log("done with test.");
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// tests...
|
|
31
|
+
test("example test", () => {
|
|
32
|
+
// This test will have beforeEach run before it
|
|
33
|
+
// and afterEach run after it
|
|
34
|
+
});
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Per-Scope Setup and Teardown
|
|
38
|
+
|
|
39
|
+
Perform per-scope setup and teardown logic with `beforeAll` and `afterAll`. The scope is determined by where the hook is defined.
|
|
40
|
+
|
|
41
|
+
### Scoped to a Describe Block
|
|
42
|
+
|
|
43
|
+
To scope the hooks to a particular describe block:
|
|
44
|
+
|
|
45
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
46
|
+
import { describe, beforeAll, afterAll, test } from "bun:test";
|
|
47
|
+
|
|
48
|
+
describe("test group", () => {
|
|
49
|
+
beforeAll(() => {
|
|
50
|
+
// setup for this describe block
|
|
51
|
+
console.log("Setting up test group");
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
afterAll(() => {
|
|
55
|
+
// teardown for this describe block
|
|
56
|
+
console.log("Tearing down test group");
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test("test 1", () => {
|
|
60
|
+
// test implementation
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test("test 2", () => {
|
|
64
|
+
// test implementation
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Scoped to a Test File
|
|
70
|
+
|
|
71
|
+
To scope the hooks to an entire test file:
|
|
72
|
+
|
|
73
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
74
|
+
import { describe, beforeAll, afterAll, test } from "bun:test";
|
|
75
|
+
|
|
76
|
+
beforeAll(() => {
|
|
77
|
+
// setup for entire file
|
|
78
|
+
console.log("Setting up test file");
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
afterAll(() => {
|
|
82
|
+
// teardown for entire file
|
|
83
|
+
console.log("Tearing down test file");
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
describe("test group", () => {
|
|
87
|
+
test("test 1", () => {
|
|
88
|
+
// test implementation
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Global Setup and Teardown
|
|
94
|
+
|
|
95
|
+
To scope the hooks to an entire multi-file test run, define the hooks in a separate file.
|
|
96
|
+
|
|
97
|
+
```ts title="setup.ts" icon="/icons/typescript.svg"
|
|
98
|
+
import { beforeAll, afterAll } from "bun:test";
|
|
99
|
+
|
|
100
|
+
beforeAll(() => {
|
|
101
|
+
// global setup
|
|
102
|
+
console.log("Global test setup");
|
|
103
|
+
// Initialize database connections, start servers, etc.
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
afterAll(() => {
|
|
107
|
+
// global teardown
|
|
108
|
+
console.log("Global test teardown");
|
|
109
|
+
// Close database connections, stop servers, etc.
|
|
110
|
+
});
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Then use `--preload` to run the setup script before any test files.
|
|
114
|
+
|
|
115
|
+
```bash terminal icon="terminal"
|
|
116
|
+
bun test --preload ./setup.ts
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
To avoid typing `--preload` every time you run tests, it can be added to your `bunfig.toml`:
|
|
120
|
+
|
|
121
|
+
```toml title="bunfig.toml" icon="settings"
|
|
122
|
+
[test]
|
|
123
|
+
preload = ["./setup.ts"]
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Practical Examples
|
|
127
|
+
|
|
128
|
+
### Database Setup
|
|
129
|
+
|
|
130
|
+
```ts title="database-setup.ts" icon="/icons/typescript.svg"
|
|
131
|
+
import { beforeAll, afterAll, beforeEach, afterEach } from "bun:test";
|
|
132
|
+
import { createConnection, closeConnection, clearDatabase } from "./db";
|
|
133
|
+
|
|
134
|
+
let connection;
|
|
135
|
+
|
|
136
|
+
beforeAll(async () => {
|
|
137
|
+
// Connect to test database
|
|
138
|
+
connection = await createConnection({
|
|
139
|
+
host: "localhost",
|
|
140
|
+
database: "test_db",
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
afterAll(async () => {
|
|
145
|
+
// Close database connection
|
|
146
|
+
await closeConnection(connection);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
beforeEach(async () => {
|
|
150
|
+
// Start with clean database for each test
|
|
151
|
+
await clearDatabase(connection);
|
|
152
|
+
});
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### API Server Setup
|
|
156
|
+
|
|
157
|
+
```ts title="server-setup.ts" icon="/icons/typescript.svg"
|
|
158
|
+
import { beforeAll, afterAll } from "bun:test";
|
|
159
|
+
import { startServer, stopServer } from "./server";
|
|
160
|
+
|
|
161
|
+
let server;
|
|
162
|
+
|
|
163
|
+
beforeAll(async () => {
|
|
164
|
+
// Start test server
|
|
165
|
+
server = await startServer({
|
|
166
|
+
port: 3001,
|
|
167
|
+
env: "test",
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
afterAll(async () => {
|
|
172
|
+
// Stop test server
|
|
173
|
+
await stopServer(server);
|
|
174
|
+
});
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Mock Setup
|
|
178
|
+
|
|
179
|
+
```ts title="mock-setup.ts" icon="/icons/typescript.svg"
|
|
180
|
+
import { beforeEach, afterEach } from "bun:test";
|
|
181
|
+
import { mock } from "bun:test";
|
|
182
|
+
|
|
183
|
+
beforeEach(() => {
|
|
184
|
+
// Set up common mocks
|
|
185
|
+
mock.module("./api-client", () => ({
|
|
186
|
+
fetchUser: mock(() => Promise.resolve({ id: 1, name: "Test User" })),
|
|
187
|
+
createUser: mock(() => Promise.resolve({ id: 2 })),
|
|
188
|
+
}));
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
afterEach(() => {
|
|
192
|
+
// Clear all mocks after each test
|
|
193
|
+
mock.restore();
|
|
194
|
+
});
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Async Lifecycle Hooks
|
|
198
|
+
|
|
199
|
+
All lifecycle hooks support async functions:
|
|
200
|
+
|
|
201
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
202
|
+
import { beforeAll, afterAll, test } from "bun:test";
|
|
203
|
+
|
|
204
|
+
beforeAll(async () => {
|
|
205
|
+
// Async setup
|
|
206
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
207
|
+
console.log("Async setup complete");
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
afterAll(async () => {
|
|
211
|
+
// Async teardown
|
|
212
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
213
|
+
console.log("Async teardown complete");
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
test("async test", async () => {
|
|
217
|
+
// Test will wait for beforeAll to complete
|
|
218
|
+
await expect(Promise.resolve("test")).resolves.toBe("test");
|
|
219
|
+
});
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Nested Hooks
|
|
223
|
+
|
|
224
|
+
Hooks can be nested and will run in the appropriate order:
|
|
225
|
+
|
|
226
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
227
|
+
import { describe, beforeAll, beforeEach, afterEach, afterAll, test } from "bun:test";
|
|
228
|
+
|
|
229
|
+
beforeAll(() => console.log("File beforeAll"));
|
|
230
|
+
afterAll(() => console.log("File afterAll"));
|
|
231
|
+
|
|
232
|
+
describe("outer describe", () => {
|
|
233
|
+
beforeAll(() => console.log("Outer beforeAll"));
|
|
234
|
+
beforeEach(() => console.log("Outer beforeEach"));
|
|
235
|
+
afterEach(() => console.log("Outer afterEach"));
|
|
236
|
+
afterAll(() => console.log("Outer afterAll"));
|
|
237
|
+
|
|
238
|
+
describe("inner describe", () => {
|
|
239
|
+
beforeAll(() => console.log("Inner beforeAll"));
|
|
240
|
+
beforeEach(() => console.log("Inner beforeEach"));
|
|
241
|
+
afterEach(() => console.log("Inner afterEach"));
|
|
242
|
+
afterAll(() => console.log("Inner afterAll"));
|
|
243
|
+
|
|
244
|
+
test("nested test", () => {
|
|
245
|
+
console.log("Test running");
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
```txt
|
|
252
|
+
// Output order:
|
|
253
|
+
// File beforeAll
|
|
254
|
+
// Outer beforeAll
|
|
255
|
+
// Inner beforeAll
|
|
256
|
+
// Outer beforeEach
|
|
257
|
+
// Inner beforeEach
|
|
258
|
+
// Test running
|
|
259
|
+
// Inner afterEach
|
|
260
|
+
// Outer afterEach
|
|
261
|
+
// Inner afterAll
|
|
262
|
+
// Outer afterAll
|
|
263
|
+
// File afterAll
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## Error Handling
|
|
267
|
+
|
|
268
|
+
If a lifecycle hook throws an error, it will affect test execution:
|
|
269
|
+
|
|
270
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
271
|
+
import { beforeAll, test } from "bun:test";
|
|
272
|
+
|
|
273
|
+
beforeAll(() => {
|
|
274
|
+
// If this throws, all tests in this scope will be skipped
|
|
275
|
+
throw new Error("Setup failed");
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
test("this test will be skipped", () => {
|
|
279
|
+
// This won't run because beforeAll failed
|
|
280
|
+
});
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
For better error handling:
|
|
284
|
+
|
|
285
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
286
|
+
import { beforeAll, test, expect } from "bun:test";
|
|
287
|
+
|
|
288
|
+
beforeAll(async () => {
|
|
289
|
+
try {
|
|
290
|
+
await setupDatabase();
|
|
291
|
+
} catch (error) {
|
|
292
|
+
console.error("Database setup failed:", error);
|
|
293
|
+
throw error; // Re-throw to fail the test suite
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
## Best Practices
|
|
299
|
+
|
|
300
|
+
### Keep Hooks Simple
|
|
301
|
+
|
|
302
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
303
|
+
// Good: Simple, focused setup
|
|
304
|
+
beforeEach(() => {
|
|
305
|
+
clearLocalStorage();
|
|
306
|
+
resetMocks();
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
// Avoid: Complex logic in hooks
|
|
310
|
+
beforeEach(async () => {
|
|
311
|
+
// Too much complex logic makes tests hard to debug
|
|
312
|
+
const data = await fetchComplexData();
|
|
313
|
+
await processData(data);
|
|
314
|
+
await setupMultipleServices(data);
|
|
315
|
+
});
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### Use Appropriate Scope
|
|
319
|
+
|
|
320
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
321
|
+
// Good: File-level setup for shared resources
|
|
322
|
+
beforeAll(async () => {
|
|
323
|
+
await startTestServer();
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
// Good: Test-level setup for test-specific state
|
|
327
|
+
beforeEach(() => {
|
|
328
|
+
user = createTestUser();
|
|
329
|
+
});
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### Clean Up Resources
|
|
333
|
+
|
|
334
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
335
|
+
import { afterAll, afterEach } from "bun:test";
|
|
336
|
+
|
|
337
|
+
afterEach(() => {
|
|
338
|
+
// Clean up after each test
|
|
339
|
+
document.body.innerHTML = "";
|
|
340
|
+
localStorage.clear();
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
afterAll(async () => {
|
|
344
|
+
// Clean up expensive resources
|
|
345
|
+
await closeDatabase();
|
|
346
|
+
await stopServer();
|
|
347
|
+
});
|
|
348
|
+
```
|