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,226 @@
1
+ ---
2
+ title: "DOM testing"
3
+ description: "Learn how to test DOM elements and components using Bun with happy-dom and React Testing Library"
4
+ ---
5
+
6
+ Bun's test runner plays well with existing component and DOM testing libraries, including React Testing Library and happy-dom.
7
+
8
+ ## happy-dom
9
+
10
+ For writing headless tests for your frontend code and components, we recommend happy-dom. Happy DOM implements a complete set of HTML and DOM APIs in plain JavaScript, making it possible to simulate a browser environment with high fidelity.
11
+
12
+ To get started install the `@happy-dom/global-registrator` package as a dev dependency.
13
+
14
+ ```bash terminal icon="terminal"
15
+ bun add -d @happy-dom/global-registrator
16
+ ```
17
+
18
+ We'll be using Bun's preload functionality to register the happy-dom globals before running our tests. This step will make browser APIs like `document` available in the global scope. Create a file called `happydom.ts` in the root of your project and add the following code:
19
+
20
+ ```ts title="happydom.ts" icon="/icons/typescript.svg"
21
+ import { GlobalRegistrator } from "@happy-dom/global-registrator";
22
+
23
+ GlobalRegistrator.register();
24
+ ```
25
+
26
+ To preload this file before `bun test`, open or create a `bunfig.toml` file and add the following lines.
27
+
28
+ ```toml title="bunfig.toml" icon="settings"
29
+ [test]
30
+ preload = ["./happydom.ts"]
31
+ ```
32
+
33
+ This will execute `happydom.ts` when you run `bun test`. Now you can write tests that use browser APIs like `document` and `window`.
34
+
35
+ ```ts title="dom.test.ts" icon="/icons/typescript.svg"
36
+ import { test, expect } from "bun:test";
37
+
38
+ test("dom test", () => {
39
+ document.body.innerHTML = `<button>My button</button>`;
40
+ const button = document.querySelector("button");
41
+ expect(button?.innerText).toEqual("My button");
42
+ });
43
+ ```
44
+
45
+ ### TypeScript Support
46
+
47
+ Depending on your `tsconfig.json` setup, you may see a "Cannot find name 'document'" type error in the code above. To "inject" the types for `document` and other browser APIs, add the following triple-slash directive to the top of any test file.
48
+
49
+ ```ts title="dom.test.ts" icon="/icons/typescript.svg"
50
+ /// <reference lib="dom" />
51
+
52
+ import { test, expect } from "bun:test";
53
+
54
+ test("dom test", () => {
55
+ document.body.innerHTML = `<button>My button</button>`;
56
+ const button = document.querySelector("button");
57
+ expect(button?.innerText).toEqual("My button");
58
+ });
59
+ ```
60
+
61
+ Let's run this test with `bun test`:
62
+
63
+ ```bash terminal icon="terminal"
64
+ bun test
65
+ ```
66
+
67
+ ```
68
+ bun test v1.2.20
69
+
70
+ dom.test.ts:
71
+ ✓ dom test [0.82ms]
72
+
73
+ 1 pass
74
+ 0 fail
75
+ 1 expect() calls
76
+ Ran 1 tests across 1 files. 1 total [125.00ms]
77
+ ```
78
+
79
+ ## React Testing Library
80
+
81
+ Bun works seamlessly with React Testing Library for testing React components. After setting up happy-dom as shown above, you can install and use React Testing Library normally.
82
+
83
+ ```bash terminal icon="terminal"
84
+ bun add -d @testing-library/react @testing-library/jest-dom
85
+ ```
86
+
87
+ ```ts title="component.test.tsx" icon="/icons/typescript.svg"
88
+ /// <reference lib="dom" />
89
+
90
+ import { test, expect } from 'bun:test';
91
+ import { render, screen } from '@testing-library/react';
92
+ import '@testing-library/jest-dom';
93
+
94
+ function Button({ children }: { children: React.ReactNode }) {
95
+ return <button>{children}</button>;
96
+ }
97
+
98
+ test('renders button', () => {
99
+ render(<Button>Click me</Button>);
100
+ expect(screen.getByRole('button')).toHaveTextContent('Click me');
101
+ });
102
+ ```
103
+
104
+ ## Advanced DOM Testing
105
+
106
+ ### Custom Elements
107
+
108
+ You can test custom elements and web components using the same setup:
109
+
110
+ ```ts title="custom-element.test.ts" icon="/icons/typescript.svg"
111
+ /// <reference lib="dom" />
112
+
113
+ import { test, expect } from "bun:test";
114
+
115
+ test("custom element", () => {
116
+ // Define a custom element
117
+ class MyElement extends HTMLElement {
118
+ constructor() {
119
+ super();
120
+ this.innerHTML = "<p>Custom element content</p>";
121
+ }
122
+ }
123
+
124
+ customElements.define("my-element", MyElement);
125
+
126
+ // Use it in tests
127
+ document.body.innerHTML = "<my-element></my-element>";
128
+ const element = document.querySelector("my-element");
129
+ expect(element?.innerHTML).toBe("<p>Custom element content</p>");
130
+ });
131
+ ```
132
+
133
+ ### Event Testing
134
+
135
+ Test DOM events and user interactions:
136
+
137
+ ```ts title="events.test.ts" icon="/icons/typescript.svg"
138
+ /// <reference lib="dom" />
139
+
140
+ import { test, expect } from "bun:test";
141
+
142
+ test("button click event", () => {
143
+ let clicked = false;
144
+
145
+ document.body.innerHTML = '<button id="test-btn">Click me</button>';
146
+ const button = document.getElementById("test-btn");
147
+
148
+ button?.addEventListener("click", () => {
149
+ clicked = true;
150
+ });
151
+
152
+ button?.click();
153
+ expect(clicked).toBe(true);
154
+ });
155
+ ```
156
+
157
+ ## Configuration Tips
158
+
159
+ ### Global Setup
160
+
161
+ For more complex DOM testing setups, you can create a more comprehensive preload file:
162
+
163
+ ```ts title="test-setup.ts" icon="/icons/typescript.svg"
164
+ import { GlobalRegistrator } from "@happy-dom/global-registrator";
165
+ import "@testing-library/jest-dom";
166
+
167
+ // Register happy-dom globals
168
+ GlobalRegistrator.register();
169
+
170
+ // Add any global test configuration here
171
+ global.ResizeObserver = class ResizeObserver {
172
+ observe() {}
173
+ unobserve() {}
174
+ disconnect() {}
175
+ };
176
+
177
+ // Mock other APIs as needed
178
+ Object.defineProperty(window, "matchMedia", {
179
+ writable: true,
180
+ value: jest.fn().mockImplementation(query => ({
181
+ matches: false,
182
+ media: query,
183
+ onchange: null,
184
+ addListener: jest.fn(),
185
+ removeListener: jest.fn(),
186
+ addEventListener: jest.fn(),
187
+ removeEventListener: jest.fn(),
188
+ dispatchEvent: jest.fn(),
189
+ })),
190
+ });
191
+ ```
192
+
193
+ Then update your `bunfig.toml`:
194
+
195
+ ```toml title="bunfig.toml" icon="settings"
196
+ [test]
197
+ preload = ["./test-setup.ts"]
198
+ ```
199
+
200
+ ## Troubleshooting
201
+
202
+ ### Common Issues
203
+
204
+ **TypeScript errors for DOM APIs**: Make sure to include the `/// <reference lib="dom" />` directive at the top of your test files.
205
+
206
+ **Missing globals**: Ensure that `@happy-dom/global-registrator` is properly imported and registered in your preload file.
207
+
208
+ **React component rendering issues**: Make sure you've installed both `@testing-library/react` and have happy-dom set up correctly.
209
+
210
+ ### Performance Considerations
211
+
212
+ Happy-dom is fast, but for very large test suites, you might want to:
213
+
214
+ - Use `beforeEach` to reset the DOM state between tests
215
+ - Avoid creating too many DOM elements in a single test
216
+ - Consider using `cleanup` functions from testing libraries
217
+
218
+ ```ts title="test-setup.ts" icon="/icons/typescript.svg"
219
+ import { afterEach } from "bun:test";
220
+ import { cleanup } from "@testing-library/react";
221
+
222
+ afterEach(() => {
223
+ cleanup();
224
+ document.body.innerHTML = "";
225
+ });
226
+ ```
@@ -0,0 +1,380 @@
1
+ ---
2
+ title: "Test runner"
3
+ description: "Bun's fast, built-in, Jest-compatible test runner with TypeScript support, lifecycle hooks, mocking, and watch mode"
4
+ ---
5
+
6
+ import Test from "/snippets/cli/test.mdx";
7
+
8
+ Bun ships with a fast, built-in, Jest-compatible test runner. Tests are executed with the Bun runtime, and support the following features.
9
+
10
+ - TypeScript and JSX
11
+ - Lifecycle hooks
12
+ - Snapshot testing
13
+ - UI & DOM testing
14
+ - Watch mode with `--watch`
15
+ - Script pre-loading with `--preload`
16
+
17
+ <Note>
18
+ Bun aims for compatibility with Jest, but not everything is implemented. To track compatibility, see [this tracking
19
+ issue](https://github.com/oven-sh/bun/issues/1825).
20
+ </Note>
21
+
22
+ ## Run tests
23
+
24
+ ```bash terminal icon="terminal"
25
+ bun test
26
+ ```
27
+
28
+ Tests are written in JavaScript or TypeScript with a Jest-like API. Refer to [Writing tests](/test/writing-tests) for full documentation.
29
+
30
+ ```ts math.test.ts icon="/icons/typescript.svg"
31
+ import { expect, test } from "bun:test";
32
+
33
+ test("2 + 2", () => {
34
+ expect(2 + 2).toBe(4);
35
+ });
36
+ ```
37
+
38
+ The runner recursively searches the working directory for files that match the following patterns:
39
+
40
+ - `*.test.{js|jsx|ts|tsx}`
41
+ - `*_test.{js|jsx|ts|tsx}`
42
+ - `*.spec.{js|jsx|ts|tsx}`
43
+ - `*_spec.{js|jsx|ts|tsx}`
44
+
45
+ You can filter the set of _test files_ to run by passing additional positional arguments to `bun test`. Any test file with a path that matches one of the filters will run. Commonly, these filters will be file or directory names; glob patterns are not yet supported.
46
+
47
+ ```bash terminal icon="terminal"
48
+ bun test <filter> <filter> ...
49
+ ```
50
+
51
+ To filter by _test name_, use the `-t`/`--test-name-pattern` flag.
52
+
53
+ ```sh terminal icon="terminal"
54
+ # run all tests or test suites with "addition" in the name
55
+ bun test --test-name-pattern addition
56
+ ```
57
+
58
+ To run a specific file in the test runner, make sure the path starts with `./` or `/` to distinguish it from a filter name.
59
+
60
+ ```bash terminal icon="terminal"
61
+ bun test ./test/specific-file.test.ts
62
+ ```
63
+
64
+ The test runner runs all tests in a single process. It loads all `--preload` scripts (see [Lifecycle](/test/lifecycle) for details), then runs all tests. If a test fails, the test runner will exit with a non-zero exit code.
65
+
66
+ ## CI/CD integration
67
+
68
+ `bun test` supports a variety of CI/CD integrations.
69
+
70
+ ### GitHub Actions
71
+
72
+ `bun test` automatically detects if it's running inside GitHub Actions and will emit GitHub Actions annotations to the console directly.
73
+
74
+ No configuration is needed, other than installing `bun` in the workflow and running `bun test`.
75
+
76
+ #### How to install `bun` in a GitHub Actions workflow
77
+
78
+ To use `bun test` in a GitHub Actions workflow, add the following step:
79
+
80
+ ```yaml title=".github/workflows/test.yml" icon="file-code"
81
+ jobs:
82
+ build:
83
+ name: build-app
84
+ runs-on: ubuntu-latest
85
+ steps:
86
+ - name: Checkout
87
+ uses: actions/checkout@v4
88
+ - name: Install bun
89
+ uses: oven-sh/setup-bun@v2
90
+ - name: Install dependencies # (assuming your project has dependencies)
91
+ run: bun install # You can use npm/yarn/pnpm instead if you prefer
92
+ - name: Run tests
93
+ run: bun test
94
+ ```
95
+
96
+ From there, you'll get GitHub Actions annotations.
97
+
98
+ ### JUnit XML reports (GitLab, etc.)
99
+
100
+ To use `bun test` with a JUnit XML reporter, you can use the `--reporter=junit` in combination with `--reporter-outfile`.
101
+
102
+ ```sh terminal icon="terminal"
103
+ bun test --reporter=junit --reporter-outfile=./bun.xml
104
+ ```
105
+
106
+ This will continue to output to stdout/stderr as usual, and also write a JUnit
107
+ XML report to the given path at the very end of the test run.
108
+
109
+ JUnit XML is a popular format for reporting test results in CI/CD pipelines.
110
+
111
+ ## Timeouts
112
+
113
+ Use the `--timeout` flag to specify a _per-test_ timeout in milliseconds. If a test times out, it will be marked as failed. The default value is `5000`.
114
+
115
+ ```bash terminal icon="terminal"
116
+ # default value is 5000
117
+ bun test --timeout 20
118
+ ```
119
+
120
+ ## Concurrent test execution
121
+
122
+ By default, Bun runs all tests sequentially within each test file. You can enable concurrent execution to run async tests in parallel, significantly speeding up test suites with independent tests.
123
+
124
+ ### `--concurrent` flag
125
+
126
+ Use the `--concurrent` flag to run all tests concurrently within their respective files:
127
+
128
+ ```sh terminal icon="terminal"
129
+ bun test --concurrent
130
+ ```
131
+
132
+ When this flag is enabled, all tests will run in parallel unless explicitly marked with `test.serial`.
133
+
134
+ ### `--max-concurrency` flag
135
+
136
+ Control the maximum number of tests running simultaneously with the `--max-concurrency` flag:
137
+
138
+ ```sh terminal icon="terminal"
139
+ # Limit to 4 concurrent tests
140
+ bun test --concurrent --max-concurrency 4
141
+
142
+ # Default: 20
143
+ bun test --concurrent
144
+ ```
145
+
146
+ This helps prevent resource exhaustion when running many concurrent tests. The default value is 20.
147
+
148
+ ### `test.concurrent`
149
+
150
+ Mark individual tests to run concurrently, even when the `--concurrent` flag is not used:
151
+
152
+ ```ts title="math.test.ts" icon="/icons/typescript.svg"
153
+ import { test, expect } from "bun:test";
154
+
155
+ // These tests run in parallel with each other
156
+ test.concurrent("concurrent test 1", async () => {
157
+ await fetch("/api/endpoint1");
158
+ expect(true).toBe(true);
159
+ });
160
+
161
+ test.concurrent("concurrent test 2", async () => {
162
+ await fetch("/api/endpoint2");
163
+ expect(true).toBe(true);
164
+ });
165
+
166
+ // This test runs sequentially
167
+ test("sequential test", () => {
168
+ expect(1 + 1).toBe(2);
169
+ });
170
+ ```
171
+
172
+ ### `test.serial`
173
+
174
+ Force tests to run sequentially, even when the `--concurrent` flag is enabled:
175
+
176
+ ```ts title="math.test.ts" icon="/icons/typescript.svg"
177
+ import { test, expect } from "bun:test";
178
+
179
+ let sharedState = 0;
180
+
181
+ // These tests must run in order
182
+ test.serial("first serial test", () => {
183
+ sharedState = 1;
184
+ expect(sharedState).toBe(1);
185
+ });
186
+
187
+ test.serial("second serial test", () => {
188
+ // Depends on the previous test
189
+ expect(sharedState).toBe(1);
190
+ sharedState = 2;
191
+ });
192
+
193
+ // This test can run concurrently if --concurrent is enabled
194
+ test("independent test", () => {
195
+ expect(true).toBe(true);
196
+ });
197
+
198
+ // Chaining test qualifiers
199
+ test.failing.each([1, 2, 3])("chained qualifiers %d", input => {
200
+ expect(input).toBe(0); // This test is expected to fail for each input
201
+ });
202
+ ```
203
+
204
+ ## Rerun tests
205
+
206
+ Use the `--rerun-each` flag to run each test multiple times. This is useful for detecting flaky or non-deterministic test failures.
207
+
208
+ ```sh terminal icon="terminal"
209
+ bun test --rerun-each 100
210
+ ```
211
+
212
+ ## Randomize test execution order
213
+
214
+ Use the `--randomize` flag to run tests in a random order. This helps detect tests that depend on shared state or execution order.
215
+
216
+ ```sh terminal icon="terminal"
217
+ bun test --randomize
218
+ ```
219
+
220
+ When using `--randomize`, the seed used for randomization will be displayed in the test summary:
221
+
222
+ ```sh terminal icon="terminal"
223
+ bun test --randomize
224
+ ```
225
+
226
+ ```txt
227
+ # ... test output ...
228
+ --seed=12345
229
+ 2 pass
230
+ 8 fail
231
+ Ran 10 tests across 2 files. [50.00ms]
232
+ ```
233
+
234
+ ### Reproducible random order with `--seed`
235
+
236
+ Use the `--seed` flag to specify a seed for the randomization. This allows you to reproduce the same test order when debugging order-dependent failures.
237
+
238
+ ```sh terminal icon="terminal"
239
+ # Reproduce a previous randomized run
240
+ bun test --seed 123456
241
+ ```
242
+
243
+ The `--seed` flag implies `--randomize`, so you don't need to specify both. Using the same seed value will always produce the same test execution order, making it easier to debug intermittent failures caused by test interdependencies.
244
+
245
+ ## Bail out with `--bail`
246
+
247
+ Use the `--bail` flag to abort the test run early after a pre-determined number of test failures. By default Bun will run all tests and report all failures, but sometimes in CI environments it's preferable to terminate earlier to reduce CPU usage.
248
+
249
+ ```sh terminal icon="terminal"
250
+ # bail after 1 failure
251
+ bun test --bail
252
+
253
+ # bail after 10 failure
254
+ bun test --bail=10
255
+ ```
256
+
257
+ ## Watch mode
258
+
259
+ Similar to `bun run`, you can pass the `--watch` flag to `bun test` to watch for changes and re-run tests.
260
+
261
+ ```bash terminal icon="terminal"
262
+ bun test --watch
263
+ ```
264
+
265
+ ## Lifecycle hooks
266
+
267
+ Bun supports the following lifecycle hooks:
268
+
269
+ | Hook | Description |
270
+ | ------------ | --------------------------- |
271
+ | `beforeAll` | Runs once before all tests. |
272
+ | `beforeEach` | Runs before each test. |
273
+ | `afterEach` | Runs after each test. |
274
+ | `afterAll` | Runs once after all tests. |
275
+
276
+ These hooks can be defined inside test files, or in a separate file that is preloaded with the `--preload` flag.
277
+
278
+ ```ts terminal icon="terminal"
279
+ bun test --preload ./setup.ts
280
+ ```
281
+
282
+ See [Test > Lifecycle](/test/lifecycle) for complete documentation.
283
+
284
+ ## Mocks
285
+
286
+ Create mock functions with the `mock` function.
287
+
288
+ ```ts title="math.test.ts" icon="/icons/typescript.svg"
289
+ import { test, expect, mock } from "bun:test";
290
+ const random = mock(() => Math.random());
291
+
292
+ test("random", () => {
293
+ const val = random();
294
+ expect(val).toBeGreaterThan(0);
295
+ expect(random).toHaveBeenCalled();
296
+ expect(random).toHaveBeenCalledTimes(1);
297
+ });
298
+ ```
299
+
300
+ Alternatively, you can use `jest.fn()`, it behaves identically.
301
+
302
+ ```ts title="math.test.ts" icon="/icons/typescript.svg"
303
+ import { test, expect, mock } from "bun:test"; // [!code --]
304
+ import { test, expect, jest } from "bun:test"; // [!code ++]
305
+
306
+ const random = mock(() => Math.random()); // [!code --]
307
+ const random = jest.fn(() => Math.random()); // [!code ++]
308
+ ```
309
+
310
+ See [Test > Mocks](/test/mocks) for complete documentation.
311
+
312
+ ## Snapshot testing
313
+
314
+ Snapshots are supported by `bun test`.
315
+
316
+ ```ts title="math.test.ts" icon="/icons/typescript.svg"
317
+ // example usage of toMatchSnapshot
318
+ import { test, expect } from "bun:test";
319
+
320
+ test("snapshot", () => {
321
+ expect({ a: 1 }).toMatchSnapshot();
322
+ });
323
+ ```
324
+
325
+ To update snapshots, use the `--update-snapshots` flag.
326
+
327
+ ```sh terminal icon="terminal"
328
+ bun test --update-snapshots
329
+ ```
330
+
331
+ See [Test > Snapshots](/test/snapshots) for complete documentation.
332
+
333
+ ## UI & DOM testing
334
+
335
+ Bun is compatible with popular UI testing libraries:
336
+
337
+ - [HappyDOM](https://github.com/capricorn86/happy-dom)
338
+ - [DOM Testing Library](https://testing-library.com/docs/dom-testing-library/intro/)
339
+ - [React Testing Library](https://testing-library.com/docs/react-testing-library/intro)
340
+
341
+ See [Test > DOM Testing](/test/dom) for complete documentation.
342
+
343
+ ## Performance
344
+
345
+ Bun's test runner is fast.
346
+
347
+ <Frame>![Running 266 React SSR tests faster than Jest can print its version number.](/images/buntest.jpeg)</Frame>
348
+
349
+ ## AI Agent Integration
350
+
351
+ When using Bun's test runner with AI coding assistants, you can enable quieter output to improve readability and reduce context noise. This feature minimizes test output verbosity while preserving essential failure information.
352
+
353
+ ### Environment Variables
354
+
355
+ Set any of the following environment variables to enable AI-friendly output:
356
+
357
+ - `CLAUDECODE=1` - For Claude Code
358
+ - `REPL_ID=1` - For Replit
359
+ - `AGENT=1` - Generic AI agent flag
360
+
361
+ ### Behavior
362
+
363
+ When an AI agent environment is detected:
364
+
365
+ - Only test failures are displayed in detail
366
+ - Passing, skipped, and todo test indicators are hidden
367
+ - Summary statistics remain intact
368
+
369
+ ```bash terminal icon="terminal"
370
+ # Example: Enable quiet output for Claude Code
371
+ CLAUDECODE=1 bun test
372
+
373
+ # Still shows failures and summary, but hides verbose passing test output
374
+ ```
375
+
376
+ This feature is particularly useful in AI-assisted development workflows where reduced output verbosity improves context efficiency while maintaining visibility into test failures.
377
+
378
+ ---
379
+
380
+ <Test />