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.
Files changed (316) hide show
  1. package/bun.d.ts +102 -6
  2. package/docs/bundler/bytecode.mdx +465 -0
  3. package/docs/bundler/css.mdx +1024 -0
  4. package/docs/bundler/esbuild.mdx +253 -0
  5. package/docs/bundler/executables.mdx +535 -0
  6. package/docs/bundler/fullstack.mdx +1064 -0
  7. package/docs/bundler/hot-reloading.mdx +229 -0
  8. package/docs/bundler/html-static.mdx +386 -0
  9. package/docs/bundler/index.mdx +1499 -0
  10. package/docs/bundler/loaders.mdx +356 -0
  11. package/docs/bundler/macros.mdx +328 -0
  12. package/docs/bundler/minifier.mdx +1306 -0
  13. package/docs/bundler/plugins.mdx +411 -0
  14. package/docs/feedback.mdx +85 -0
  15. package/docs/guides/binary/arraybuffer-to-array.mdx +29 -0
  16. package/docs/guides/binary/arraybuffer-to-blob.mdx +26 -0
  17. package/docs/guides/binary/arraybuffer-to-buffer.mdx +27 -0
  18. package/docs/guides/binary/arraybuffer-to-string.mdx +17 -0
  19. package/docs/guides/binary/arraybuffer-to-typedarray.mdx +41 -0
  20. package/docs/guides/binary/blob-to-arraybuffer.mdx +16 -0
  21. package/docs/guides/binary/blob-to-dataview.mdx +16 -0
  22. package/docs/guides/binary/blob-to-stream.mdx +16 -0
  23. package/docs/guides/binary/blob-to-string.mdx +17 -0
  24. package/docs/guides/binary/blob-to-typedarray.mdx +16 -0
  25. package/docs/guides/binary/buffer-to-arraybuffer.mdx +16 -0
  26. package/docs/guides/binary/buffer-to-blob.mdx +16 -0
  27. package/docs/guides/binary/buffer-to-readablestream.mdx +43 -0
  28. package/docs/guides/binary/buffer-to-string.mdx +27 -0
  29. package/docs/guides/binary/buffer-to-typedarray.mdx +16 -0
  30. package/docs/guides/binary/dataview-to-string.mdx +17 -0
  31. package/docs/guides/binary/typedarray-to-arraybuffer.mdx +27 -0
  32. package/docs/guides/binary/typedarray-to-blob.mdx +18 -0
  33. package/docs/guides/binary/typedarray-to-buffer.mdx +16 -0
  34. package/docs/guides/binary/typedarray-to-dataview.mdx +16 -0
  35. package/docs/guides/binary/typedarray-to-readablestream.mdx +43 -0
  36. package/docs/guides/binary/typedarray-to-string.mdx +18 -0
  37. package/docs/guides/deployment/aws-lambda.mdx +204 -0
  38. package/docs/guides/deployment/digital-ocean.mdx +161 -0
  39. package/docs/guides/deployment/google-cloud-run.mdx +197 -0
  40. package/docs/guides/deployment/railway.mdx +145 -0
  41. package/docs/guides/deployment/render.mdx +82 -0
  42. package/docs/guides/deployment/vercel.mdx +99 -0
  43. package/docs/guides/ecosystem/astro.mdx +82 -0
  44. package/docs/guides/ecosystem/discordjs.mdx +80 -0
  45. package/docs/guides/ecosystem/docker.mdx +151 -0
  46. package/docs/guides/ecosystem/drizzle.mdx +195 -0
  47. package/docs/guides/ecosystem/edgedb.mdx +257 -0
  48. package/docs/guides/ecosystem/elysia.mdx +31 -0
  49. package/docs/guides/ecosystem/express.mdx +43 -0
  50. package/docs/guides/ecosystem/hono.mdx +47 -0
  51. package/docs/guides/ecosystem/mongoose.mdx +92 -0
  52. package/docs/guides/ecosystem/neon-drizzle.mdx +234 -0
  53. package/docs/guides/ecosystem/neon-serverless-postgres.mdx +60 -0
  54. package/docs/guides/ecosystem/nextjs.mdx +57 -0
  55. package/docs/guides/ecosystem/nuxt.mdx +90 -0
  56. package/docs/guides/ecosystem/pm2.mdx +55 -0
  57. package/docs/guides/ecosystem/prisma-postgres.mdx +169 -0
  58. package/docs/guides/ecosystem/prisma.mdx +164 -0
  59. package/docs/guides/ecosystem/qwik.mdx +114 -0
  60. package/docs/guides/ecosystem/react.mdx +52 -0
  61. package/docs/guides/ecosystem/remix.mdx +97 -0
  62. package/docs/guides/ecosystem/sentry.mdx +54 -0
  63. package/docs/guides/ecosystem/solidstart.mdx +66 -0
  64. package/docs/guides/ecosystem/ssr-react.mdx +49 -0
  65. package/docs/guides/ecosystem/stric.mdx +54 -0
  66. package/docs/guides/ecosystem/sveltekit.mdx +138 -0
  67. package/docs/guides/ecosystem/systemd.mdx +114 -0
  68. package/docs/guides/ecosystem/upstash.mdx +87 -0
  69. package/docs/guides/ecosystem/vite.mdx +77 -0
  70. package/docs/guides/html-rewriter/extract-links.mdx +72 -0
  71. package/docs/guides/html-rewriter/extract-social-meta.mdx +97 -0
  72. package/docs/guides/http/cluster.mdx +69 -0
  73. package/docs/guides/http/fetch-unix.mdx +35 -0
  74. package/docs/guides/http/fetch.mdx +26 -0
  75. package/docs/guides/http/file-uploads.mdx +97 -0
  76. package/docs/guides/http/hot.mdx +28 -0
  77. package/docs/guides/http/proxy.mdx +26 -0
  78. package/docs/guides/http/server.mdx +48 -0
  79. package/docs/guides/http/simple.mdx +20 -0
  80. package/docs/guides/http/stream-file.mdx +50 -0
  81. package/docs/guides/http/stream-iterator.mdx +49 -0
  82. package/docs/guides/http/stream-node-streams-in-bun.mdx +22 -0
  83. package/docs/guides/http/tls.mdx +32 -0
  84. package/docs/guides/index.mdx +10 -0
  85. package/docs/guides/install/add-dev.mdx +28 -0
  86. package/docs/guides/install/add-git.mdx +38 -0
  87. package/docs/guides/install/add-optional.mdx +27 -0
  88. package/docs/guides/install/add-peer.mdx +45 -0
  89. package/docs/guides/install/add-tarball.mdx +35 -0
  90. package/docs/guides/install/add.mdx +44 -0
  91. package/docs/guides/install/azure-artifacts.mdx +76 -0
  92. package/docs/guides/install/cicd.mdx +43 -0
  93. package/docs/guides/install/custom-registry.mdx +32 -0
  94. package/docs/guides/install/from-npm-install-to-bun-install.mdx +230 -0
  95. package/docs/guides/install/git-diff-bun-lockfile.mdx +47 -0
  96. package/docs/guides/install/jfrog-artifactory.mdx +28 -0
  97. package/docs/guides/install/npm-alias.mdx +25 -0
  98. package/docs/guides/install/registry-scope.mdx +40 -0
  99. package/docs/guides/install/trusted.mdx +50 -0
  100. package/docs/guides/install/workspaces.mdx +70 -0
  101. package/docs/guides/install/yarnlock.mdx +50 -0
  102. package/docs/guides/process/argv.mdx +66 -0
  103. package/docs/guides/process/ctrl-c.mdx +18 -0
  104. package/docs/guides/process/ipc.mdx +69 -0
  105. package/docs/guides/process/nanoseconds.mdx +15 -0
  106. package/docs/guides/process/os-signals.mdx +41 -0
  107. package/docs/guides/process/spawn-stderr.mdx +34 -0
  108. package/docs/guides/process/spawn-stdout.mdx +28 -0
  109. package/docs/guides/process/spawn.mdx +43 -0
  110. package/docs/guides/process/stdin.mdx +62 -0
  111. package/docs/guides/read-file/arraybuffer.mdx +30 -0
  112. package/docs/guides/read-file/buffer.mdx +21 -0
  113. package/docs/guides/read-file/exists.mdx +18 -0
  114. package/docs/guides/read-file/json.mdx +19 -0
  115. package/docs/guides/read-file/mime.mdx +22 -0
  116. package/docs/guides/read-file/stream.mdx +28 -0
  117. package/docs/guides/read-file/string.mdx +24 -0
  118. package/docs/guides/read-file/uint8array.mdx +23 -0
  119. package/docs/guides/read-file/watch.mdx +66 -0
  120. package/docs/guides/runtime/build-time-constants.mdx +295 -0
  121. package/docs/guides/runtime/cicd.mdx +45 -0
  122. package/docs/guides/runtime/codesign-macos-executable.mdx +61 -0
  123. package/docs/guides/runtime/define-constant.mdx +149 -0
  124. package/docs/guides/runtime/delete-directory.mdx +39 -0
  125. package/docs/guides/runtime/delete-file.mdx +21 -0
  126. package/docs/guides/runtime/heap-snapshot.mdx +28 -0
  127. package/docs/guides/runtime/import-html.mdx +17 -0
  128. package/docs/guides/runtime/import-json.mdx +46 -0
  129. package/docs/guides/runtime/import-toml.mdx +32 -0
  130. package/docs/guides/runtime/import-yaml.mdx +104 -0
  131. package/docs/guides/runtime/read-env.mdx +37 -0
  132. package/docs/guides/runtime/set-env.mdx +51 -0
  133. package/docs/guides/runtime/shell.mdx +42 -0
  134. package/docs/guides/runtime/timezone.mdx +38 -0
  135. package/docs/guides/runtime/tsconfig-paths.mdx +31 -0
  136. package/docs/guides/runtime/typescript.mdx +51 -0
  137. package/docs/guides/runtime/vscode-debugger.mdx +48 -0
  138. package/docs/guides/runtime/web-debugger.mdx +103 -0
  139. package/docs/guides/streams/node-readable-to-arraybuffer.mdx +13 -0
  140. package/docs/guides/streams/node-readable-to-blob.mdx +13 -0
  141. package/docs/guides/streams/node-readable-to-json.mdx +14 -0
  142. package/docs/guides/streams/node-readable-to-string.mdx +14 -0
  143. package/docs/guides/streams/node-readable-to-uint8array.mdx +13 -0
  144. package/docs/guides/streams/to-array.mdx +16 -0
  145. package/docs/guides/streams/to-arraybuffer.mdx +16 -0
  146. package/docs/guides/streams/to-blob.mdx +16 -0
  147. package/docs/guides/streams/to-buffer.mdx +17 -0
  148. package/docs/guides/streams/to-json.mdx +16 -0
  149. package/docs/guides/streams/to-string.mdx +16 -0
  150. package/docs/guides/streams/to-typedarray.mdx +24 -0
  151. package/docs/guides/test/bail.mdx +24 -0
  152. package/docs/guides/test/coverage-threshold.mdx +67 -0
  153. package/docs/guides/test/coverage.mdx +49 -0
  154. package/docs/guides/test/happy-dom.mdx +73 -0
  155. package/docs/guides/test/migrate-from-jest.mdx +125 -0
  156. package/docs/guides/test/mock-clock.mdx +50 -0
  157. package/docs/guides/test/mock-functions.mdx +70 -0
  158. package/docs/guides/test/rerun-each.mdx +16 -0
  159. package/docs/guides/test/run-tests.mdx +116 -0
  160. package/docs/guides/test/skip-tests.mdx +43 -0
  161. package/docs/guides/test/snapshot.mdx +102 -0
  162. package/docs/guides/test/spy-on.mdx +49 -0
  163. package/docs/guides/test/svelte-test.mdx +113 -0
  164. package/docs/guides/test/testing-library.mdx +93 -0
  165. package/docs/guides/test/timeout.mdx +17 -0
  166. package/docs/guides/test/todo-tests.mdx +74 -0
  167. package/docs/guides/test/update-snapshots.mdx +49 -0
  168. package/docs/guides/test/watch-mode.mdx +24 -0
  169. package/docs/guides/util/base64.mdx +17 -0
  170. package/docs/guides/util/deep-equals.mdx +41 -0
  171. package/docs/guides/util/deflate.mdx +20 -0
  172. package/docs/guides/util/detect-bun.mdx +25 -0
  173. package/docs/guides/util/entrypoint.mdx +19 -0
  174. package/docs/guides/util/escape-html.mdx +24 -0
  175. package/docs/guides/util/file-url-to-path.mdx +16 -0
  176. package/docs/guides/util/gzip.mdx +20 -0
  177. package/docs/guides/util/hash-a-password.mdx +56 -0
  178. package/docs/guides/util/import-meta-dir.mdx +15 -0
  179. package/docs/guides/util/import-meta-file.mdx +15 -0
  180. package/docs/guides/util/import-meta-path.mdx +15 -0
  181. package/docs/guides/util/javascript-uuid.mdx +25 -0
  182. package/docs/guides/util/main.mdx +43 -0
  183. package/docs/guides/util/path-to-file-url.mdx +16 -0
  184. package/docs/guides/util/sleep.mdx +24 -0
  185. package/docs/guides/util/version.mdx +23 -0
  186. package/docs/guides/util/which-path-to-executable-bin.mdx +17 -0
  187. package/docs/guides/websocket/compression.mdx +33 -0
  188. package/docs/guides/websocket/context.mdx +74 -0
  189. package/docs/guides/websocket/pubsub.mdx +40 -0
  190. package/docs/guides/websocket/simple.mdx +35 -0
  191. package/docs/guides/write-file/append.mdx +54 -0
  192. package/docs/guides/write-file/basic.mdx +46 -0
  193. package/docs/guides/write-file/blob.mdx +30 -0
  194. package/docs/guides/write-file/cat.mdx +19 -0
  195. package/docs/guides/write-file/file-cp.mdx +18 -0
  196. package/docs/guides/write-file/filesink.mdx +54 -0
  197. package/docs/guides/write-file/response.mdx +19 -0
  198. package/docs/guides/write-file/stdout.mdx +23 -0
  199. package/docs/guides/write-file/stream.mdx +19 -0
  200. package/docs/guides/write-file/unlink.mdx +18 -0
  201. package/docs/index.mdx +133 -0
  202. package/docs/installation.mdx +365 -0
  203. package/docs/pm/bunx.mdx +83 -0
  204. package/docs/pm/catalogs.mdx +292 -0
  205. package/docs/pm/cli/add.mdx +179 -0
  206. package/docs/pm/cli/audit.mdx +60 -0
  207. package/docs/pm/cli/install.mdx +471 -0
  208. package/docs/pm/cli/link.mdx +48 -0
  209. package/docs/pm/cli/outdated.mdx +197 -0
  210. package/docs/pm/cli/patch.mdx +69 -0
  211. package/docs/pm/cli/pm.mdx +319 -0
  212. package/docs/pm/cli/publish.mdx +123 -0
  213. package/docs/pm/cli/remove.mdx +16 -0
  214. package/docs/pm/cli/update.mdx +140 -0
  215. package/docs/pm/cli/why.mdx +84 -0
  216. package/docs/pm/filter.mdx +102 -0
  217. package/docs/pm/global-cache.mdx +72 -0
  218. package/docs/pm/isolated-installs.mdx +205 -0
  219. package/docs/pm/lifecycle.mdx +57 -0
  220. package/docs/pm/lockfile.mdx +64 -0
  221. package/docs/pm/npmrc.mdx +111 -0
  222. package/docs/pm/overrides.mdx +83 -0
  223. package/docs/pm/scopes-registries.mdx +35 -0
  224. package/docs/pm/security-scanner-api.mdx +95 -0
  225. package/docs/pm/workspaces.mdx +109 -0
  226. package/docs/project/benchmarking.mdx +218 -0
  227. package/docs/project/bindgen.mdx +223 -0
  228. package/docs/project/building-windows.mdx +133 -0
  229. package/docs/project/contributing.mdx +343 -0
  230. package/docs/project/feedback.mdx +20 -0
  231. package/docs/project/license.mdx +78 -0
  232. package/docs/project/roadmap.mdx +8 -0
  233. package/docs/quickstart.mdx +240 -0
  234. package/docs/runtime/auto-install.mdx +97 -0
  235. package/docs/runtime/binary-data.mdx +846 -0
  236. package/docs/runtime/bun-apis.mdx +59 -0
  237. package/docs/runtime/bunfig.mdx +642 -0
  238. package/docs/runtime/c-compiler.mdx +204 -0
  239. package/docs/runtime/child-process.mdx +532 -0
  240. package/docs/runtime/color.mdx +267 -0
  241. package/docs/runtime/console.mdx +67 -0
  242. package/docs/runtime/cookies.mdx +454 -0
  243. package/docs/runtime/debugger.mdx +335 -0
  244. package/docs/runtime/environment-variables.mdx +214 -0
  245. package/docs/runtime/ffi.mdx +565 -0
  246. package/docs/runtime/file-io.mdx +306 -0
  247. package/docs/runtime/file-system-router.mdx +118 -0
  248. package/docs/runtime/file-types.mdx +354 -0
  249. package/docs/runtime/glob.mdx +181 -0
  250. package/docs/runtime/globals.mdx +72 -0
  251. package/docs/runtime/hashing.mdx +315 -0
  252. package/docs/runtime/html-rewriter.mdx +340 -0
  253. package/docs/runtime/http/cookies.mdx +79 -0
  254. package/docs/runtime/http/error-handling.mdx +40 -0
  255. package/docs/runtime/http/metrics.mdx +36 -0
  256. package/docs/runtime/http/routing.mdx +289 -0
  257. package/docs/runtime/http/server.mdx +647 -0
  258. package/docs/runtime/http/tls.mdx +101 -0
  259. package/docs/runtime/http/websockets.mdx +404 -0
  260. package/docs/runtime/index.mdx +223 -0
  261. package/docs/runtime/jsx.mdx +115 -0
  262. package/docs/runtime/module-resolution.mdx +342 -0
  263. package/docs/runtime/networking/dns.mdx +111 -0
  264. package/docs/runtime/networking/fetch.mdx +468 -0
  265. package/docs/runtime/networking/tcp.mdx +239 -0
  266. package/docs/runtime/networking/udp.mdx +129 -0
  267. package/docs/runtime/node-api.mdx +19 -0
  268. package/docs/runtime/nodejs-compat.mdx +468 -0
  269. package/docs/runtime/plugins.mdx +405 -0
  270. package/docs/runtime/redis.mdx +582 -0
  271. package/docs/runtime/s3.mdx +863 -0
  272. package/docs/runtime/secrets.mdx +336 -0
  273. package/docs/runtime/semver.mdx +57 -0
  274. package/docs/runtime/shell.mdx +637 -0
  275. package/docs/runtime/sql.mdx +1404 -0
  276. package/docs/runtime/sqlite.mdx +699 -0
  277. package/docs/runtime/streams.mdx +232 -0
  278. package/docs/runtime/templating/create.mdx +269 -0
  279. package/docs/runtime/templating/init.mdx +58 -0
  280. package/docs/runtime/transpiler.mdx +288 -0
  281. package/docs/runtime/typescript.mdx +58 -0
  282. package/docs/runtime/utils.mdx +922 -0
  283. package/docs/runtime/watch-mode.mdx +161 -0
  284. package/docs/runtime/web-apis.mdx +29 -0
  285. package/docs/runtime/workers.mdx +328 -0
  286. package/docs/runtime/yaml.mdx +469 -0
  287. package/docs/snippets/cli/add.mdx +166 -0
  288. package/docs/snippets/cli/build.mdx +196 -0
  289. package/docs/snippets/cli/feedback.mdx +17 -0
  290. package/docs/snippets/cli/init.mdx +84 -0
  291. package/docs/snippets/cli/install.mdx +173 -0
  292. package/docs/snippets/cli/link.mdx +163 -0
  293. package/docs/snippets/cli/outdated.mdx +140 -0
  294. package/docs/snippets/cli/patch.mdx +171 -0
  295. package/docs/snippets/cli/publish.mdx +198 -0
  296. package/docs/snippets/cli/remove.mdx +146 -0
  297. package/docs/snippets/cli/run.mdx +293 -0
  298. package/docs/snippets/cli/test.mdx +100 -0
  299. package/docs/snippets/cli/update.mdx +144 -0
  300. package/docs/snippets/product-card.mdx +32 -0
  301. package/docs/snippets/product-tiles.mdx +94 -0
  302. package/docs/test/code-coverage.mdx +409 -0
  303. package/docs/test/configuration.mdx +467 -0
  304. package/docs/test/dates-times.mdx +129 -0
  305. package/docs/test/discovery.mdx +90 -0
  306. package/docs/test/dom.mdx +226 -0
  307. package/docs/test/index.mdx +380 -0
  308. package/docs/test/lifecycle.mdx +348 -0
  309. package/docs/test/mocks.mdx +637 -0
  310. package/docs/test/reporters.mdx +117 -0
  311. package/docs/test/runtime-behavior.mdx +342 -0
  312. package/docs/test/snapshots.mdx +434 -0
  313. package/docs/test/writing-tests.mdx +635 -0
  314. package/docs/typescript.mdx +54 -0
  315. package/package.json +8 -6
  316. 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
+ ```