bun-types 1.3.2-canary.20251106T140813 → 1.3.2-canary.20251108T140624

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,117 @@
1
+ ---
2
+ title: Test Reporters
3
+ description:
4
+ ---
5
+
6
+ bun test supports different output formats through reporters. This document covers both built-in reporters and how to implement your own custom reporters.
7
+
8
+ ---
9
+
10
+ ## Built-in Reporters
11
+
12
+ ### Default Console Reporter
13
+
14
+ By default, bun test outputs results to the console in a human-readable format:
15
+
16
+ ```sh terminal icon="terminal"
17
+ test/package-json-lint.test.ts:
18
+ ✓ test/package.json [0.88ms]
19
+ ✓ test/js/third_party/grpc-js/package.json [0.18ms]
20
+ ✓ test/js/third_party/svelte/package.json [0.21ms]
21
+ ✓ test/js/third_party/express/package.json [1.05ms]
22
+
23
+ 4 pass
24
+ 0 fail
25
+ 4 expect() calls
26
+ Ran 4 tests in 1.44ms
27
+ ```
28
+
29
+ When a terminal doesn't support colors, the output avoids non-ascii characters:
30
+
31
+ ```sh terminal icon="terminal"
32
+ test/package-json-lint.test.ts:
33
+ (pass) test/package.json [0.48ms]
34
+ (pass) test/js/third_party/grpc-js/package.json [0.10ms]
35
+ (pass) test/js/third_party/svelte/package.json [0.04ms]
36
+ (pass) test/js/third_party/express/package.json [0.04ms]
37
+
38
+ 4 pass
39
+ 0 fail
40
+ 4 expect() calls
41
+ Ran 4 tests across 1 files. [0.66ms]
42
+ ```
43
+
44
+ ### JUnit XML Reporter
45
+
46
+ For CI/CD environments, Bun supports generating JUnit XML reports. JUnit XML is a widely-adopted format for test results that can be parsed by many CI/CD systems, including GitLab, Jenkins, and others.
47
+
48
+ #### Using the JUnit Reporter
49
+
50
+ To generate a JUnit XML report, use the `--reporter=junit` flag along with `--reporter-outfile` to specify the output file:
51
+
52
+ ```sh terminal icon="terminal"
53
+ bun test --reporter=junit --reporter-outfile=./junit.xml
54
+ ```
55
+
56
+ This continues to output to the console as usual while also writing the JUnit XML report to the specified path at the end of the test run.
57
+
58
+ #### Configuring via bunfig.toml
59
+
60
+ You can also configure the JUnit reporter in your `bunfig.toml` file:
61
+
62
+ ```toml title="bunfig.toml" icon="settings"
63
+ [test.reporter]
64
+ junit = "path/to/junit.xml" # Output path for JUnit XML report
65
+ ```
66
+
67
+ #### Environment Variables in JUnit Reports
68
+
69
+ The JUnit reporter automatically includes environment information as `<properties>` in the XML output. This can be helpful for tracking test runs in CI environments.
70
+
71
+ Specifically, it includes the following environment variables when available:
72
+
73
+ | Environment Variable | Property Name | Description |
74
+ | ----------------------------------------------------------------------- | ------------- | ---------------------- |
75
+ | `GITHUB_RUN_ID`, `GITHUB_SERVER_URL`, `GITHUB_REPOSITORY`, `CI_JOB_URL` | `ci` | CI build information |
76
+ | `GITHUB_SHA`, `CI_COMMIT_SHA`, `GIT_SHA` | `commit` | Git commit identifiers |
77
+ | System hostname | `hostname` | Machine hostname |
78
+
79
+ This makes it easier to track which environment and commit a particular test run was for.
80
+
81
+ #### Current Limitations
82
+
83
+ The JUnit reporter currently has a few limitations that will be addressed in future updates:
84
+
85
+ - `stdout` and `stderr` output from individual tests are not included in the report
86
+ - Precise timestamp fields per test case are not included
87
+
88
+ ### GitHub Actions reporter
89
+
90
+ Bun test automatically detects when it's running inside GitHub Actions and emits GitHub Actions annotations to the console directly. No special configuration is needed beyond installing Bun and running `bun test`.
91
+
92
+ For a GitHub Actions workflow configuration example, see the [CI/CD integration](/pm/cli/install#ci%2Fcd) section of the CLI documentation.
93
+
94
+ ---
95
+
96
+ ## Custom Reporters
97
+
98
+ Bun allows developers to implement custom test reporters by extending the WebKit Inspector Protocol with additional testing-specific domains.
99
+
100
+ ### Inspector Protocol for Testing
101
+
102
+ To support test reporting, Bun extends the standard WebKit Inspector Protocol with two custom domains:
103
+
104
+ 1. **TestReporter**: Reports test discovery, execution start, and completion events
105
+ 2. **LifecycleReporter**: Reports errors and exceptions during test execution
106
+
107
+ These extensions allow you to build custom reporting tools that can receive detailed information about test execution in real-time.
108
+
109
+ ### Key Events
110
+
111
+ Custom reporters can listen for these key events:
112
+
113
+ - `TestReporter.found`: Emitted when a test is discovered
114
+ - `TestReporter.start`: Emitted when a test starts running
115
+ - `TestReporter.end`: Emitted when a test completes
116
+ - `Console.messageAdded`: Emitted when console output occurs during a test
117
+ - `LifecycleReporter.error`: Emitted when an error or exception occurs
@@ -0,0 +1,342 @@
1
+ ---
2
+ title: "Runtime behavior"
3
+ description: "Learn about Bun test's runtime integration, environment variables, timeouts, and error handling"
4
+ ---
5
+
6
+ `bun test` is deeply integrated with Bun's runtime. This is part of what makes `bun test` fast and simple to use.
7
+
8
+ ## Environment Variables
9
+
10
+ ### NODE_ENV
11
+
12
+ `bun test` automatically sets `$NODE_ENV` to `"test"` unless it's already set in the environment or via `.env` files. This is standard behavior for most test runners and helps ensure consistent test behavior.
13
+
14
+ ```ts title="test.ts" icon="/icons/typescript.svg"
15
+ import { test, expect } from "bun:test";
16
+
17
+ test("NODE_ENV is set to test", () => {
18
+ expect(process.env.NODE_ENV).toBe("test");
19
+ });
20
+ ```
21
+
22
+ You can override this by setting `NODE_ENV` explicitly:
23
+
24
+ ```bash terminal icon="terminal"
25
+ NODE_ENV=development bun test
26
+ ```
27
+
28
+ ### TZ (Timezone)
29
+
30
+ By default, all `bun test` runs use UTC (`Etc/UTC`) as the time zone unless overridden by the `TZ` environment variable. This ensures consistent date and time behavior across different development environments.
31
+
32
+ ```ts title="test.ts" icon="/icons/typescript.svg"
33
+ import { test, expect } from "bun:test";
34
+
35
+ test("timezone is UTC by default", () => {
36
+ const date = new Date();
37
+ expect(date.getTimezoneOffset()).toBe(0);
38
+ });
39
+ ```
40
+
41
+ To test with a specific timezone:
42
+
43
+ ```bash terminal icon="terminal"
44
+ TZ=America/New_York bun test
45
+ ```
46
+
47
+ ## Test Timeouts
48
+
49
+ Each test has a default timeout of 5000ms (5 seconds) if not explicitly overridden. Tests that exceed this timeout will fail.
50
+
51
+ ### Global Timeout
52
+
53
+ Change the timeout globally with the `--timeout` flag:
54
+
55
+ ```bash terminal icon="terminal"
56
+ bun test --timeout 10000 # 10 seconds
57
+ ```
58
+
59
+ ### Per-Test Timeout
60
+
61
+ Set timeout per test as the third parameter to the test function:
62
+
63
+ ```ts title="test.ts" icon="/icons/typescript.svg"
64
+ import { test, expect } from "bun:test";
65
+
66
+ test("fast test", () => {
67
+ expect(1 + 1).toBe(2);
68
+ }, 1000); // 1 second timeout
69
+
70
+ test("slow test", async () => {
71
+ await new Promise(resolve => setTimeout(resolve, 8000));
72
+ }, 10000); // 10 second timeout
73
+ ```
74
+
75
+ ### Infinite Timeout
76
+
77
+ Use `0` or `Infinity` to disable timeout:
78
+
79
+ ```ts title="test.ts" icon="/icons/typescript.svg"
80
+ test("test without timeout", async () => {
81
+ // This test can run indefinitely
82
+ await someVeryLongOperation();
83
+ }, 0);
84
+ ```
85
+
86
+ ## Error Handling
87
+
88
+ ### Unhandled Errors
89
+
90
+ `bun test` tracks unhandled promise rejections and errors that occur between tests. If such errors occur, the final exit code will be non-zero (specifically, the count of such errors), even if all tests pass.
91
+
92
+ This helps catch errors in asynchronous code that might otherwise go unnoticed:
93
+
94
+ ```ts title="test.ts" icon="/icons/typescript.svg"
95
+ import { test } from "bun:test";
96
+
97
+ test("test 1", () => {
98
+ // This test passes
99
+ expect(true).toBe(true);
100
+ });
101
+
102
+ // This error happens outside any test
103
+ setTimeout(() => {
104
+ throw new Error("Unhandled error");
105
+ }, 0);
106
+
107
+ test("test 2", () => {
108
+ // This test also passes
109
+ expect(true).toBe(true);
110
+ });
111
+
112
+ // The test run will still fail with a non-zero exit code
113
+ // because of the unhandled error
114
+ ```
115
+
116
+ ### Promise Rejections
117
+
118
+ Unhandled promise rejections are also caught:
119
+
120
+ ```ts title="test.ts" icon="/icons/typescript.svg"
121
+ import { test } from "bun:test";
122
+
123
+ test("passing test", () => {
124
+ expect(1).toBe(1);
125
+ });
126
+
127
+ // This will cause the test run to fail
128
+ Promise.reject(new Error("Unhandled rejection"));
129
+ ```
130
+
131
+ ### Custom Error Handling
132
+
133
+ You can set up custom error handlers in your test setup:
134
+
135
+ ```ts title="test-setup.ts" icon="/icons/typescript.svg"
136
+ process.on("uncaughtException", error => {
137
+ console.error("Uncaught Exception:", error);
138
+ process.exit(1);
139
+ });
140
+
141
+ process.on("unhandledRejection", (reason, promise) => {
142
+ console.error("Unhandled Rejection at:", promise, "reason:", reason);
143
+ process.exit(1);
144
+ });
145
+ ```
146
+
147
+ ## CLI Flags Integration
148
+
149
+ Several Bun CLI flags can be used with `bun test` to modify its behavior:
150
+
151
+ ### Memory Usage
152
+
153
+ ```bash terminal icon="terminal"
154
+ # Reduces memory usage for the test runner VM
155
+ bun test --smol
156
+ ```
157
+
158
+ ### Debugging
159
+
160
+ ```bash terminal icon="terminal"
161
+ # Attaches the debugger to the test runner process
162
+ bun test --inspect
163
+ bun test --inspect-brk
164
+ ```
165
+
166
+ ### Module Loading
167
+
168
+ ```bash terminal icon="terminal"
169
+ # Runs scripts before test files (useful for global setup/mocks)
170
+ bun test --preload ./setup.ts
171
+
172
+ # Sets compile-time constants
173
+ bun test --define "process.env.API_URL='http://localhost:3000'"
174
+
175
+ # Configures custom loaders
176
+ bun test --loader .special:special-loader
177
+
178
+ # Uses a different tsconfig
179
+ bun test --tsconfig-override ./test-tsconfig.json
180
+
181
+ # Sets package.json conditions for module resolution
182
+ bun test --conditions development
183
+
184
+ # Loads environment variables for tests
185
+ bun test --env-file .env.test
186
+ ```
187
+
188
+ ### Installation-related Flags
189
+
190
+ ```bash
191
+ # Affect any network requests or auto-installs during test execution
192
+ bun test --prefer-offline
193
+ bun test --frozen-lockfile
194
+ ```
195
+
196
+ ## Watch and Hot Reloading
197
+
198
+ ### Watch Mode
199
+
200
+ When running `bun test` with the `--watch` flag, the test runner will watch for file changes and re-run affected tests.
201
+
202
+ ```bash terminal icon="terminal"
203
+ bun test --watch
204
+ ```
205
+
206
+ The test runner is smart about which tests to re-run:
207
+
208
+ ```ts title="math.test.ts" icon="/icons/typescript.svg"
209
+ import { add } from "./math.js";
210
+ import { test, expect } from "bun:test";
211
+
212
+ test("addition", () => {
213
+ expect(add(2, 3)).toBe(5);
214
+ });
215
+ ```
216
+
217
+ If you modify `math.js`, only `math.test.ts` will re-run, not all tests.
218
+
219
+ ### Hot Reloading
220
+
221
+ The `--hot` flag provides similar functionality but is more aggressive about trying to preserve state between runs:
222
+
223
+ ```bash terminal icon="terminal"
224
+ bun test --hot
225
+ ```
226
+
227
+ For most test scenarios, `--watch` is the recommended option as it provides better isolation between test runs.
228
+
229
+ ## Global Variables
230
+
231
+ The following globals are automatically available in test files without importing (though they can be imported from `bun:test` if preferred):
232
+
233
+ ```ts title="test.ts" icon="/icons/typescript.svg"
234
+ // All of these are available globally
235
+ test("global test function", () => {
236
+ expect(true).toBe(true);
237
+ });
238
+
239
+ describe("global describe", () => {
240
+ beforeAll(() => {
241
+ // global beforeAll
242
+ });
243
+
244
+ it("global it function", () => {
245
+ // it is an alias for test
246
+ });
247
+ });
248
+
249
+ // Jest compatibility
250
+ jest.fn();
251
+
252
+ // Vitest compatibility
253
+ vi.fn();
254
+ ```
255
+
256
+ You can also import them explicitly if you prefer:
257
+
258
+ ```ts title="test.ts" icon="/icons/typescript.svg"
259
+ import { test, it, describe, expect, beforeAll, beforeEach, afterAll, afterEach, jest, vi } from "bun:test";
260
+ ```
261
+
262
+ ## Process Integration
263
+
264
+ ### Exit Codes
265
+
266
+ `bun test` uses standard exit codes:
267
+
268
+ - `0`: All tests passed, no unhandled errors
269
+ - `1`: Test failures occurred
270
+ - `>1`: Number of unhandled errors (even if tests passed)
271
+
272
+ ### Signal Handling
273
+
274
+ The test runner properly handles common signals:
275
+
276
+ ```bash terminal icon="terminal"
277
+ # Gracefully stops test execution
278
+ kill -SIGTERM <test-process-pid>
279
+
280
+ # Immediately stops test execution
281
+ kill -SIGKILL <test-process-pid>
282
+ ```
283
+
284
+ ### Environment Detection
285
+
286
+ Bun automatically detects certain environments and adjusts behavior:
287
+
288
+ ```ts title="test.ts" icon="/icons/typescript.svg"
289
+ // GitHub Actions detection
290
+ if (process.env.GITHUB_ACTIONS) {
291
+ // Bun automatically emits GitHub Actions annotations
292
+ }
293
+
294
+ // CI detection
295
+ if (process.env.CI) {
296
+ // Certain behaviors may be adjusted for CI environments
297
+ }
298
+ ```
299
+
300
+ ## Performance Considerations
301
+
302
+ ### Single Process
303
+
304
+ The test runner runs all tests in a single process by default. This provides:
305
+
306
+ - **Faster startup** - No need to spawn multiple processes
307
+ - **Shared memory** - Efficient resource usage
308
+ - **Simple debugging** - All tests in one process
309
+
310
+ However, this means:
311
+
312
+ - Tests share global state (use lifecycle hooks to clean up)
313
+ - One test crash can affect others
314
+ - No true parallelization of individual tests
315
+
316
+ ### Memory Management
317
+
318
+ ```bash terminal icon="terminal"
319
+ # Monitor memory usage
320
+ bun test --smol # Reduces memory footprint
321
+
322
+ # For large test suites, consider splitting files
323
+ bun test src/unit/
324
+ bun test src/integration/
325
+ ```
326
+
327
+ ### Test Isolation
328
+
329
+ Since tests run in the same process, ensure proper cleanup:
330
+
331
+ ```ts title="test.ts" icon="/icons/typescript.svg"
332
+ import { afterEach } from "bun:test";
333
+
334
+ afterEach(() => {
335
+ // Clean up global state
336
+ global.myGlobalVar = undefined;
337
+ delete process.env.TEST_VAR;
338
+
339
+ // Reset modules if needed
340
+ jest.resetModules();
341
+ });
342
+ ```