bun-types 1.3.2-canary.20251105T140650 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bun.d.ts +102 -6
- package/docs/README.md +28 -0
- package/docs/bundler/bytecode.mdx +465 -0
- package/docs/bundler/{css.md → css.mdx} +97 -101
- package/docs/bundler/esbuild.mdx +253 -0
- package/docs/bundler/{executables.md → executables.mdx} +130 -221
- package/docs/bundler/fullstack.mdx +1064 -0
- package/docs/bundler/{hmr.md → hot-reloading.mdx} +74 -79
- package/docs/bundler/{html.md → html-static.mdx} +148 -111
- package/docs/bundler/index.mdx +1499 -0
- package/docs/bundler/loaders.mdx +356 -0
- package/docs/bundler/{macros.md → macros.mdx} +83 -84
- package/docs/bundler/minifier.mdx +1306 -0
- package/docs/bundler/plugins.mdx +411 -0
- package/docs/feedback.mdx +85 -0
- package/docs/guides/binary/{arraybuffer-to-array.md → arraybuffer-to-array.mdx} +3 -1
- package/docs/guides/binary/{arraybuffer-to-blob.md → arraybuffer-to-blob.mdx} +3 -1
- package/docs/guides/binary/{arraybuffer-to-buffer.md → arraybuffer-to-buffer.mdx} +3 -1
- package/docs/guides/binary/{arraybuffer-to-string.md → arraybuffer-to-string.mdx} +3 -1
- package/docs/guides/binary/{arraybuffer-to-typedarray.md → arraybuffer-to-typedarray.mdx} +3 -1
- package/docs/guides/binary/{blob-to-arraybuffer.md → blob-to-arraybuffer.mdx} +3 -1
- package/docs/guides/binary/{blob-to-dataview.md → blob-to-dataview.mdx} +3 -1
- package/docs/guides/binary/{blob-to-stream.md → blob-to-stream.mdx} +3 -1
- package/docs/guides/binary/{blob-to-string.md → blob-to-string.mdx} +3 -1
- package/docs/guides/binary/{blob-to-typedarray.md → blob-to-typedarray.mdx} +3 -1
- package/docs/guides/binary/{buffer-to-arraybuffer.md → buffer-to-arraybuffer.mdx} +3 -1
- package/docs/guides/binary/{buffer-to-blob.md → buffer-to-blob.mdx} +3 -1
- package/docs/guides/binary/{buffer-to-readablestream.md → buffer-to-readablestream.mdx} +3 -1
- package/docs/guides/binary/{buffer-to-string.md → buffer-to-string.mdx} +3 -1
- package/docs/guides/binary/{buffer-to-typedarray.md → buffer-to-typedarray.mdx} +3 -1
- package/docs/guides/binary/{dataview-to-string.md → dataview-to-string.mdx} +3 -1
- package/docs/guides/binary/{typedarray-to-arraybuffer.md → typedarray-to-arraybuffer.mdx} +3 -1
- package/docs/guides/binary/{typedarray-to-blob.md → typedarray-to-blob.mdx} +3 -1
- package/docs/guides/binary/{typedarray-to-buffer.md → typedarray-to-buffer.mdx} +3 -1
- package/docs/guides/binary/{typedarray-to-dataview.md → typedarray-to-dataview.mdx} +3 -1
- package/docs/guides/binary/{typedarray-to-readablestream.md → typedarray-to-readablestream.mdx} +3 -1
- package/docs/guides/binary/{typedarray-to-string.md → typedarray-to-string.mdx} +3 -1
- package/docs/guides/deployment/aws-lambda.mdx +204 -0
- package/docs/guides/deployment/digital-ocean.mdx +161 -0
- package/docs/guides/deployment/google-cloud-run.mdx +197 -0
- package/docs/guides/deployment/{railway.md → railway.mdx} +42 -54
- package/docs/guides/deployment/render.mdx +82 -0
- package/docs/guides/deployment/vercel.mdx +99 -0
- package/docs/guides/ecosystem/{astro.md → astro.mdx} +16 -6
- package/docs/guides/ecosystem/{discordjs.md → discordjs.mdx} +21 -18
- package/docs/guides/ecosystem/{docker.md → docker.mdx} +25 -14
- package/docs/guides/ecosystem/{drizzle.md → drizzle.mdx} +32 -22
- package/docs/guides/ecosystem/{edgedb.md → edgedb.mdx} +63 -34
- package/docs/guides/ecosystem/{elysia.md → elysia.mdx} +11 -11
- package/docs/guides/ecosystem/{express.md → express.mdx} +12 -9
- package/docs/guides/ecosystem/{hono.md → hono.mdx} +16 -8
- package/docs/guides/ecosystem/{mongoose.md → mongoose.mdx} +26 -21
- package/docs/guides/ecosystem/{neon-drizzle.md → neon-drizzle.mdx} +49 -35
- package/docs/guides/ecosystem/{neon-serverless-postgres.md → neon-serverless-postgres.mdx} +16 -11
- package/docs/guides/ecosystem/{nextjs.md → nextjs.mdx} +18 -10
- package/docs/guides/ecosystem/{nuxt.md → nuxt.mdx} +45 -11
- package/docs/guides/ecosystem/{pm2.md → pm2.mdx} +7 -9
- package/docs/guides/ecosystem/prisma-postgres.mdx +169 -0
- package/docs/guides/ecosystem/prisma.mdx +164 -0
- package/docs/guides/ecosystem/{qwik.md → qwik.mdx} +18 -11
- package/docs/guides/ecosystem/{react.md → react.mdx} +9 -7
- package/docs/guides/ecosystem/{remix.md → remix.mdx} +45 -26
- package/docs/guides/ecosystem/{sentry.md → sentry.mdx} +7 -5
- package/docs/guides/ecosystem/{solidstart.md → solidstart.mdx} +21 -13
- package/docs/guides/ecosystem/{ssr-react.md → ssr-react.mdx} +9 -11
- package/docs/guides/ecosystem/{stric.md → stric.mdx} +16 -17
- package/docs/guides/ecosystem/{sveltekit.md → sveltekit.mdx} +42 -29
- package/docs/guides/ecosystem/{systemd.md → systemd.mdx} +27 -26
- package/docs/guides/ecosystem/upstash.mdx +87 -0
- package/docs/guides/ecosystem/{vite.md → vite.mdx} +20 -14
- package/docs/guides/html-rewriter/{extract-links.md → extract-links.mdx} +11 -7
- package/docs/guides/html-rewriter/{extract-social-meta.md → extract-social-meta.mdx} +6 -2
- package/docs/guides/http/{cluster.md → cluster.mdx} +10 -7
- package/docs/guides/http/{fetch-unix.md → fetch-unix.mdx} +5 -3
- package/docs/guides/http/{fetch.md → fetch.mdx} +5 -3
- package/docs/guides/http/{file-uploads.md → file-uploads.mdx} +18 -15
- package/docs/guides/http/{hot.md → hot.mdx} +9 -7
- package/docs/guides/http/{proxy.md → proxy.mdx} +7 -5
- package/docs/guides/http/{server.md → server.mdx} +4 -2
- package/docs/guides/http/{simple.md → simple.mdx} +4 -2
- package/docs/guides/http/{stream-file.md → stream-file.mdx} +6 -4
- package/docs/guides/http/{stream-iterator.md → stream-iterator.mdx} +5 -3
- package/docs/guides/http/{stream-node-streams-in-bun.md → stream-node-streams-in-bun.mdx} +4 -2
- package/docs/guides/http/{tls.md → tls.mdx} +5 -3
- package/docs/guides/index.mdx +10 -0
- package/docs/guides/install/{add-dev.md → add-dev.mdx} +8 -6
- package/docs/guides/install/add-git.mdx +38 -0
- package/docs/guides/install/{add-optional.md → add-optional.mdx} +7 -5
- package/docs/guides/install/{add-peer.md → add-peer.mdx} +13 -11
- package/docs/guides/install/{add-tarball.md → add-tarball.mdx} +7 -5
- package/docs/guides/install/{add.md → add.mdx} +12 -10
- package/docs/guides/install/{azure-artifacts.md → azure-artifacts.mdx} +15 -12
- package/docs/guides/{runtime/cicd.md → install/cicd.mdx} +13 -13
- package/docs/guides/install/{custom-registry.md → custom-registry.mdx} +6 -4
- package/docs/guides/install/{from-npm-install-to-bun-install.md → from-npm-install-to-bun-install.mdx} +50 -34
- package/docs/guides/install/{git-diff-bun-lockfile.md → git-diff-bun-lockfile.mdx} +14 -11
- package/docs/guides/install/{jfrog-artifactory.md → jfrog-artifactory.mdx} +4 -4
- package/docs/guides/install/{npm-alias.md → npm-alias.mdx} +6 -4
- package/docs/guides/install/{registry-scope.md → registry-scope.mdx} +6 -4
- package/docs/guides/install/{trusted.md → trusted.mdx} +22 -18
- package/docs/guides/install/{workspaces.md → workspaces.mdx} +13 -13
- package/docs/guides/install/{yarnlock.md → yarnlock.mdx} +15 -9
- package/docs/guides/process/{argv.md → argv.mdx} +17 -9
- package/docs/guides/process/{ctrl-c.md → ctrl-c.mdx} +4 -2
- package/docs/guides/process/{ipc.md → ipc.mdx} +13 -10
- package/docs/guides/process/{nanoseconds.md → nanoseconds.mdx} +3 -1
- package/docs/guides/process/{os-signals.md → os-signals.mdx} +3 -1
- package/docs/guides/process/{spawn-stderr.md → spawn-stderr.mdx} +4 -1
- package/docs/guides/process/{spawn-stdout.md → spawn-stdout.mdx} +3 -1
- package/docs/guides/process/{spawn.md → spawn.mdx} +3 -1
- package/docs/guides/process/{stdin.md → stdin.mdx} +15 -7
- package/docs/guides/read-file/{arraybuffer.md → arraybuffer.mdx} +5 -3
- package/docs/guides/read-file/{buffer.md → buffer.mdx} +4 -2
- package/docs/guides/read-file/{exists.md → exists.mdx} +4 -2
- package/docs/guides/read-file/{json.md → json.mdx} +4 -2
- package/docs/guides/read-file/{mime.md → mime.mdx} +3 -1
- package/docs/guides/read-file/{stream.md → stream.mdx} +3 -1
- package/docs/guides/read-file/{string.md → string.mdx} +3 -1
- package/docs/guides/read-file/{uint8array.md → uint8array.mdx} +3 -1
- package/docs/guides/read-file/{watch.md → watch.mdx} +6 -8
- package/docs/guides/runtime/{build-time-constants.md → build-time-constants.mdx} +24 -22
- package/docs/guides/{install/cicd.md → runtime/cicd.mdx} +11 -7
- package/docs/guides/runtime/{codesign-macos-executable.md → codesign-macos-executable.mdx} +14 -9
- package/docs/guides/runtime/{define-constant.md → define-constant.mdx} +20 -16
- package/docs/guides/runtime/{delete-directory.md → delete-directory.mdx} +5 -3
- package/docs/guides/runtime/{delete-file.md → delete-file.mdx} +4 -2
- package/docs/guides/runtime/{heap-snapshot.md → heap-snapshot.mdx} +5 -3
- package/docs/guides/runtime/{import-html.md → import-html.mdx} +4 -2
- package/docs/guides/runtime/{import-json.md → import-json.mdx} +6 -4
- package/docs/guides/runtime/{import-toml.md → import-toml.mdx} +5 -3
- package/docs/guides/runtime/{import-yaml.md → import-yaml.mdx} +9 -7
- package/docs/guides/runtime/{read-env.md → read-env.mdx} +10 -5
- package/docs/guides/runtime/{set-env.md → set-env.mdx} +14 -10
- package/docs/guides/runtime/{shell.md → shell.mdx} +6 -4
- package/docs/guides/runtime/{timezone.md → timezone.mdx} +10 -7
- package/docs/guides/runtime/{tsconfig-paths.md → tsconfig-paths.mdx} +5 -3
- package/docs/guides/runtime/{typescript.md → typescript.mdx} +8 -6
- package/docs/guides/runtime/{vscode-debugger.md → vscode-debugger.mdx} +12 -11
- package/docs/guides/runtime/{web-debugger.md → web-debugger.mdx} +39 -18
- package/docs/guides/streams/{node-readable-to-arraybuffer.md → node-readable-to-arraybuffer.mdx} +3 -1
- package/docs/guides/streams/{node-readable-to-blob.md → node-readable-to-blob.mdx} +3 -1
- package/docs/guides/streams/{node-readable-to-json.md → node-readable-to-json.mdx} +3 -1
- package/docs/guides/streams/{node-readable-to-string.md → node-readable-to-string.mdx} +3 -1
- package/docs/guides/streams/{node-readable-to-uint8array.md → node-readable-to-uint8array.mdx} +3 -1
- package/docs/guides/streams/{to-array.md → to-array.mdx} +3 -1
- package/docs/guides/streams/{to-arraybuffer.md → to-arraybuffer.mdx} +3 -1
- package/docs/guides/streams/{to-blob.md → to-blob.mdx} +3 -1
- package/docs/guides/streams/{to-buffer.md → to-buffer.mdx} +3 -1
- package/docs/guides/streams/{to-json.md → to-json.mdx} +4 -2
- package/docs/guides/streams/{to-string.md → to-string.mdx} +3 -1
- package/docs/guides/streams/{to-typedarray.md → to-typedarray.mdx} +3 -1
- package/docs/guides/test/{bail.md → bail.mdx} +7 -5
- package/docs/guides/test/{coverage-threshold.md → coverage-threshold.mdx} +14 -7
- package/docs/guides/test/{coverage.md → coverage.mdx} +9 -4
- package/docs/guides/test/{happy-dom.md → happy-dom.mdx} +13 -8
- package/docs/guides/test/{migrate-from-jest.md → migrate-from-jest.mdx} +19 -37
- package/docs/guides/test/{mock-clock.md → mock-clock.mdx} +3 -1
- package/docs/guides/test/{mock-functions.md → mock-functions.mdx} +7 -5
- package/docs/guides/test/{rerun-each.md → rerun-each.mdx} +5 -3
- package/docs/guides/test/{run-tests.md → run-tests.mdx} +16 -11
- package/docs/guides/test/{skip-tests.md → skip-tests.mdx} +8 -4
- package/docs/guides/test/{snapshot.md → snapshot.mdx} +20 -13
- package/docs/guides/test/spy-on.mdx +49 -0
- package/docs/guides/test/{svelte-test.md → svelte-test.mdx} +16 -23
- package/docs/guides/test/{testing-library.md → testing-library.mdx} +18 -17
- package/docs/guides/test/{timeout.md → timeout.mdx} +5 -3
- package/docs/guides/test/{todo-tests.md → todo-tests.mdx} +13 -6
- package/docs/guides/test/{update-snapshots.md → update-snapshots.mdx} +9 -6
- package/docs/guides/test/{watch-mode.md → watch-mode.mdx} +9 -4
- package/docs/guides/util/{base64.md → base64.mdx} +3 -1
- package/docs/guides/util/{deep-equals.md → deep-equals.mdx} +5 -3
- package/docs/guides/util/{deflate.md → deflate.mdx} +3 -1
- package/docs/guides/util/{detect-bun.md → detect-bun.mdx} +3 -1
- package/docs/guides/util/{entrypoint.md → entrypoint.mdx} +4 -2
- package/docs/guides/util/{escape-html.md → escape-html.mdx} +3 -1
- package/docs/guides/util/{file-url-to-path.md → file-url-to-path.mdx} +3 -1
- package/docs/guides/util/{gzip.md → gzip.mdx} +3 -1
- package/docs/guides/util/{hash-a-password.md → hash-a-password.mdx} +3 -1
- package/docs/guides/util/{import-meta-dir.md → import-meta-dir.mdx} +4 -2
- package/docs/guides/util/{import-meta-file.md → import-meta-file.mdx} +4 -2
- package/docs/guides/util/{import-meta-path.md → import-meta-path.mdx} +4 -2
- package/docs/guides/util/{javascript-uuid.md → javascript-uuid.mdx} +3 -1
- package/docs/guides/util/{main.md → main.mdx} +19 -8
- package/docs/guides/util/{path-to-file-url.md → path-to-file-url.mdx} +3 -1
- package/docs/guides/util/{sleep.md → sleep.mdx} +3 -1
- package/docs/guides/util/{version.md → version.mdx} +6 -4
- package/docs/guides/util/{which-path-to-executable-bin.md → which-path-to-executable-bin.mdx} +4 -2
- package/docs/guides/websocket/{compression.md → compression.mdx} +5 -3
- package/docs/guides/websocket/{context.md → context.mdx} +9 -12
- package/docs/guides/websocket/{pubsub.md → pubsub.mdx} +5 -6
- package/docs/guides/websocket/{simple.md → simple.mdx} +5 -3
- package/docs/guides/write-file/{append.md → append.mdx} +3 -1
- package/docs/guides/write-file/{basic.md → basic.mdx} +3 -1
- package/docs/guides/write-file/{blob.md → blob.mdx} +3 -1
- package/docs/guides/write-file/{cat.md → cat.mdx} +4 -2
- package/docs/guides/write-file/{file-cp.md → file-cp.mdx} +3 -1
- package/docs/guides/write-file/{filesink.md → filesink.mdx} +3 -1
- package/docs/guides/write-file/{response.md → response.mdx} +3 -1
- package/docs/guides/write-file/{stdout.md → stdout.mdx} +3 -1
- package/docs/guides/write-file/{stream.md → stream.mdx} +3 -1
- package/docs/guides/write-file/{unlink.md → unlink.mdx} +3 -1
- package/docs/{index.md → index.mdx} +97 -41
- package/docs/installation.mdx +365 -0
- package/docs/{cli/bunx.md → pm/bunx.mdx} +25 -31
- package/docs/{install/catalogs.md → pm/catalogs.mdx} +18 -24
- package/docs/{cli/add.md → pm/cli/add.mdx} +61 -55
- package/docs/{install/audit.md → pm/cli/audit.mdx} +11 -8
- package/docs/{cli/install.md → pm/cli/install.mdx} +208 -81
- package/docs/{cli/link.md → pm/cli/link.mdx} +27 -19
- package/docs/{cli/outdated.md → pm/cli/outdated.mdx} +119 -12
- package/docs/{install/patch.md → pm/cli/patch.mdx} +25 -15
- package/docs/{cli/pm.md → pm/cli/pm.mdx} +96 -62
- package/docs/{cli/publish.md → pm/cli/publish.mdx} +38 -35
- package/docs/pm/cli/remove.mdx +16 -0
- package/docs/{cli/update.md → pm/cli/update.mdx} +26 -15
- package/docs/{cli/why.md → pm/cli/why.mdx} +27 -10
- package/docs/{cli/filter.md → pm/filter.mdx} +26 -14
- package/docs/{install/cache.md → pm/global-cache.mdx} +25 -12
- package/docs/{install/isolated.md → pm/isolated-installs.mdx} +32 -24
- package/docs/{install/lifecycle.md → pm/lifecycle.mdx} +20 -9
- package/docs/{install/lockfile.md → pm/lockfile.mdx} +18 -12
- package/docs/{install/npmrc.md → pm/npmrc.mdx} +30 -24
- package/docs/{install/overrides.md → pm/overrides.mdx} +47 -37
- package/docs/{install/registries.md → pm/scopes-registries.mdx} +8 -3
- package/docs/{install/security-scanner-api.md → pm/security-scanner-api.mdx} +22 -8
- package/docs/{install/workspaces.md → pm/workspaces.mdx} +17 -22
- package/docs/project/{benchmarking.md → benchmarking.mdx} +26 -11
- package/docs/project/{bindgen.md → bindgen.mdx} +12 -14
- package/docs/project/{building-windows.md → building-windows.mdx} +18 -47
- package/docs/project/{contributing.md → contributing.mdx} +56 -60
- package/docs/project/feedback.mdx +20 -0
- package/docs/project/license.mdx +78 -0
- package/docs/project/roadmap.mdx +8 -0
- package/docs/quickstart.mdx +240 -0
- package/docs/runtime/{autoimport.md → auto-install.mdx} +34 -31
- package/docs/{api/binary-data.md → runtime/binary-data.mdx} +77 -269
- package/docs/runtime/bun-apis.mdx +59 -0
- package/docs/runtime/{bunfig.md → bunfig.mdx} +95 -225
- package/docs/{api/cc.md → runtime/c-compiler.mdx} +16 -9
- package/docs/{api/spawn.md → runtime/child-process.mdx} +69 -119
- package/docs/{api/color.md → runtime/color.mdx} +6 -1
- package/docs/{api/console.md → runtime/console.mdx} +17 -7
- package/docs/{api/cookie.md → runtime/cookies.mdx} +24 -19
- package/docs/runtime/{debugger.md → debugger.mdx} +61 -51
- package/docs/runtime/environment-variables.mdx +214 -0
- package/docs/{api/ffi.md → runtime/ffi.mdx} +53 -45
- package/docs/{api/file-io.md → runtime/file-io.mdx} +41 -101
- package/docs/{api/file-system-router.md → runtime/file-system-router.mdx} +8 -2
- package/docs/{bundler/loaders.md → runtime/file-types.mdx} +56 -112
- package/docs/{api/glob.md → runtime/glob.mdx} +4 -1
- package/docs/runtime/globals.mdx +72 -0
- package/docs/{api/hashing.md → runtime/hashing.mdx} +18 -22
- package/docs/{api/html-rewriter.md → runtime/html-rewriter.mdx} +36 -30
- package/docs/runtime/http/cookies.mdx +79 -0
- package/docs/runtime/http/error-handling.mdx +40 -0
- package/docs/runtime/http/metrics.mdx +36 -0
- package/docs/runtime/http/routing.mdx +289 -0
- package/docs/runtime/http/server.mdx +647 -0
- package/docs/runtime/http/tls.mdx +101 -0
- package/docs/{api/websockets.md → runtime/http/websockets.mdx} +62 -231
- package/docs/{cli/run.md → runtime/index.mdx} +70 -108
- package/docs/runtime/jsx.mdx +115 -0
- package/docs/runtime/{modules.md → module-resolution.mdx} +83 -61
- package/docs/{api/dns.md → runtime/networking/dns.mdx} +23 -22
- package/docs/{api/fetch.md → runtime/networking/fetch.mdx} +10 -5
- package/docs/{api/tcp.md → runtime/networking/tcp.mdx} +59 -41
- package/docs/{api/udp.md → runtime/networking/udp.mdx} +14 -8
- package/docs/{api/node-api.md → runtime/node-api.mdx} +5 -0
- package/docs/runtime/{nodejs-apis.md → nodejs-compat.mdx} +9 -4
- package/docs/{bundler/plugins.md → runtime/plugins.mdx} +17 -61
- package/docs/{api/redis.md → runtime/redis.mdx} +65 -80
- package/docs/{api/s3.md → runtime/s3.mdx} +79 -66
- package/docs/{api/secrets.md → runtime/secrets.mdx} +27 -10
- package/docs/{api/semver.md → runtime/semver.mdx} +9 -4
- package/docs/runtime/{shell.md → shell.mdx} +52 -20
- package/docs/{api/sql.md → runtime/sql.mdx} +129 -99
- package/docs/{api/sqlite.md → runtime/sqlite.mdx} +162 -157
- package/docs/{api/streams.md → runtime/streams.mdx} +33 -31
- package/docs/{cli/bun-create.md → runtime/templating/create.mdx} +74 -143
- package/docs/{cli/init.md → runtime/templating/init.mdx} +24 -51
- package/docs/{api/transpiler.md → runtime/transpiler.mdx} +50 -38
- package/docs/{typescript.md → runtime/typescript.mdx} +7 -2
- package/docs/{api/utils.md → runtime/utils.mdx} +81 -50
- package/docs/runtime/{hot.md → watch-mode.mdx} +53 -37
- package/docs/runtime/web-apis.mdx +29 -0
- package/docs/{api/workers.md → runtime/workers.mdx} +28 -22
- package/docs/{api/yaml.md → runtime/yaml.mdx} +33 -232
- package/docs/snippets/cli/add.mdx +166 -0
- package/docs/snippets/cli/build.mdx +196 -0
- package/docs/snippets/cli/feedback.mdx +17 -0
- package/docs/snippets/cli/init.mdx +84 -0
- package/docs/snippets/cli/install.mdx +173 -0
- package/docs/snippets/cli/link.mdx +163 -0
- package/docs/snippets/cli/outdated.mdx +140 -0
- package/docs/snippets/cli/patch.mdx +171 -0
- package/docs/snippets/cli/publish.mdx +198 -0
- package/docs/snippets/cli/remove.mdx +146 -0
- package/docs/snippets/cli/run.mdx +293 -0
- package/docs/snippets/cli/test.mdx +100 -0
- package/docs/snippets/cli/update.mdx +144 -0
- package/docs/snippets/product-card.mdx +32 -0
- package/docs/snippets/product-tiles.mdx +94 -0
- package/docs/test/code-coverage.mdx +409 -0
- package/docs/test/configuration.mdx +467 -0
- package/docs/test/{time.md → dates-times.mdx} +23 -20
- package/docs/test/{discovery.md → discovery.mdx} +15 -10
- package/docs/test/dom.mdx +226 -0
- package/docs/{cli/test.md → test/index.mdx} +77 -94
- package/docs/test/lifecycle.mdx +348 -0
- package/docs/test/mocks.mdx +637 -0
- package/docs/test/{reporters.md → reporters.mdx} +15 -15
- package/docs/test/runtime-behavior.mdx +342 -0
- package/docs/test/snapshots.mdx +434 -0
- package/docs/test/writing-tests.mdx +635 -0
- package/docs/typescript.mdx +54 -0
- package/package.json +8 -6
- package/test.d.ts +2 -2
- package/docs/api/file.md +0 -19
- package/docs/api/globals.md +0 -387
- package/docs/api/http.md +0 -1408
- package/docs/api/import-meta.md +0 -69
- package/docs/benchmarks.md +0 -120
- package/docs/bun-flavored-toml.md +0 -42
- package/docs/bundler/css_modules.md +0 -145
- package/docs/bundler/fullstack.md +0 -418
- package/docs/bundler/index.md +0 -1735
- package/docs/bundler/intro.md +0 -75
- package/docs/bundler/vs-esbuild.md +0 -1127
- package/docs/cli/bun-completions.md +0 -3
- package/docs/cli/bun-install.md +0 -349
- package/docs/cli/bun-upgrade.md +0 -39
- package/docs/cli/info.md +0 -65
- package/docs/cli/patch-commit.md +0 -11
- package/docs/cli/remove.md +0 -7
- package/docs/cli/unlink.md +0 -9
- package/docs/contributing/upgrading-webkit.md +0 -57
- package/docs/ecosystem/elysia.md +0 -24
- package/docs/ecosystem/express.md +0 -37
- package/docs/ecosystem/hono.md +0 -18
- package/docs/ecosystem/react.md +0 -65
- package/docs/ecosystem/stric.md +0 -38
- package/docs/guides/ecosystem/prisma.md +0 -141
- package/docs/guides/ecosystem/render.md +0 -79
- package/docs/guides/install/add-git.md +0 -36
- package/docs/guides/test/spy-on.md +0 -46
- package/docs/install/index.md +0 -248
- package/docs/installation.md +0 -327
- package/docs/project/asan.md +0 -124
- package/docs/project/internals/build-process-for-ci.md +0 -75
- package/docs/project/licensing.md +0 -73
- package/docs/project/roadmap.md +0 -87
- package/docs/quickstart.md +0 -157
- package/docs/runtime/bun-apis.md +0 -207
- package/docs/runtime/env.md +0 -253
- package/docs/runtime/index.md +0 -312
- package/docs/runtime/jsx.md +0 -385
- package/docs/runtime/loaders.md +0 -130
- package/docs/runtime/plugins.md +0 -561
- package/docs/runtime/typescript.md +0 -139
- package/docs/runtime/web-apis.md +0 -128
- package/docs/test/configuration.md +0 -154
- package/docs/test/coverage.md +0 -142
- package/docs/test/dom.md +0 -75
- package/docs/test/examples/concurrent-test-glob.md +0 -132
- package/docs/test/hot.md +0 -15
- package/docs/test/lifecycle.md +0 -81
- package/docs/test/mocks.md +0 -313
- package/docs/test/runtime-behavior.md +0 -95
- package/docs/test/snapshots.md +0 -68
- package/docs/test/writing.md +0 -825
|
@@ -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
|
+
```
|
|
@@ -1,3 +1,10 @@
|
|
|
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
|
+
|
|
1
8
|
Bun ships with a fast, built-in, Jest-compatible test runner. Tests are executed with the Bun runtime, and support the following features.
|
|
2
9
|
|
|
3
10
|
- TypeScript and JSX
|
|
@@ -7,19 +14,20 @@ Bun ships with a fast, built-in, Jest-compatible test runner. Tests are executed
|
|
|
7
14
|
- Watch mode with `--watch`
|
|
8
15
|
- Script pre-loading with `--preload`
|
|
9
16
|
|
|
10
|
-
|
|
11
|
-
Bun aims for compatibility with Jest, but not everything is implemented. To track compatibility, see [this tracking
|
|
12
|
-
|
|
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>
|
|
13
21
|
|
|
14
22
|
## Run tests
|
|
15
23
|
|
|
16
|
-
```bash
|
|
17
|
-
|
|
24
|
+
```bash terminal icon="terminal"
|
|
25
|
+
bun test
|
|
18
26
|
```
|
|
19
27
|
|
|
20
|
-
Tests are written in JavaScript or TypeScript with a Jest-like API. Refer to [Writing tests](
|
|
28
|
+
Tests are written in JavaScript or TypeScript with a Jest-like API. Refer to [Writing tests](/test/writing-tests) for full documentation.
|
|
21
29
|
|
|
22
|
-
```ts
|
|
30
|
+
```ts math.test.ts icon="/icons/typescript.svg"
|
|
23
31
|
import { expect, test } from "bun:test";
|
|
24
32
|
|
|
25
33
|
test("2 + 2", () => {
|
|
@@ -36,26 +44,24 @@ The runner recursively searches the working directory for files that match the f
|
|
|
36
44
|
|
|
37
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.
|
|
38
46
|
|
|
39
|
-
```bash
|
|
40
|
-
|
|
47
|
+
```bash terminal icon="terminal"
|
|
48
|
+
bun test <filter> <filter> ...
|
|
41
49
|
```
|
|
42
50
|
|
|
43
51
|
To filter by _test name_, use the `-t`/`--test-name-pattern` flag.
|
|
44
52
|
|
|
45
|
-
```sh
|
|
53
|
+
```sh terminal icon="terminal"
|
|
46
54
|
# run all tests or test suites with "addition" in the name
|
|
47
|
-
|
|
55
|
+
bun test --test-name-pattern addition
|
|
48
56
|
```
|
|
49
57
|
|
|
50
|
-
When no tests match the filter, `bun test` exits with code 1.
|
|
51
|
-
|
|
52
58
|
To run a specific file in the test runner, make sure the path starts with `./` or `/` to distinguish it from a filter name.
|
|
53
59
|
|
|
54
|
-
```bash
|
|
55
|
-
|
|
60
|
+
```bash terminal icon="terminal"
|
|
61
|
+
bun test ./test/specific-file.test.ts
|
|
56
62
|
```
|
|
57
63
|
|
|
58
|
-
The test runner runs all tests in a single process. It loads all `--preload` scripts (see [Lifecycle](
|
|
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.
|
|
59
65
|
|
|
60
66
|
## CI/CD integration
|
|
61
67
|
|
|
@@ -71,7 +77,7 @@ No configuration is needed, other than installing `bun` in the workflow and runn
|
|
|
71
77
|
|
|
72
78
|
To use `bun test` in a GitHub Actions workflow, add the following step:
|
|
73
79
|
|
|
74
|
-
```yaml
|
|
80
|
+
```yaml title=".github/workflows/test.yml" icon="file-code"
|
|
75
81
|
jobs:
|
|
76
82
|
build:
|
|
77
83
|
name: build-app
|
|
@@ -93,8 +99,8 @@ From there, you'll get GitHub Actions annotations.
|
|
|
93
99
|
|
|
94
100
|
To use `bun test` with a JUnit XML reporter, you can use the `--reporter=junit` in combination with `--reporter-outfile`.
|
|
95
101
|
|
|
96
|
-
```sh
|
|
97
|
-
|
|
102
|
+
```sh terminal icon="terminal"
|
|
103
|
+
bun test --reporter=junit --reporter-outfile=./bun.xml
|
|
98
104
|
```
|
|
99
105
|
|
|
100
106
|
This will continue to output to stdout/stderr as usual, and also write a JUnit
|
|
@@ -106,9 +112,9 @@ JUnit XML is a popular format for reporting test results in CI/CD pipelines.
|
|
|
106
112
|
|
|
107
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`.
|
|
108
114
|
|
|
109
|
-
```bash
|
|
115
|
+
```bash terminal icon="terminal"
|
|
110
116
|
# default value is 5000
|
|
111
|
-
|
|
117
|
+
bun test --timeout 20
|
|
112
118
|
```
|
|
113
119
|
|
|
114
120
|
## Concurrent test execution
|
|
@@ -119,8 +125,8 @@ By default, Bun runs all tests sequentially within each test file. You can enabl
|
|
|
119
125
|
|
|
120
126
|
Use the `--concurrent` flag to run all tests concurrently within their respective files:
|
|
121
127
|
|
|
122
|
-
```sh
|
|
123
|
-
|
|
128
|
+
```sh terminal icon="terminal"
|
|
129
|
+
bun test --concurrent
|
|
124
130
|
```
|
|
125
131
|
|
|
126
132
|
When this flag is enabled, all tests will run in parallel unless explicitly marked with `test.serial`.
|
|
@@ -129,12 +135,12 @@ When this flag is enabled, all tests will run in parallel unless explicitly mark
|
|
|
129
135
|
|
|
130
136
|
Control the maximum number of tests running simultaneously with the `--max-concurrency` flag:
|
|
131
137
|
|
|
132
|
-
```sh
|
|
138
|
+
```sh terminal icon="terminal"
|
|
133
139
|
# Limit to 4 concurrent tests
|
|
134
|
-
|
|
140
|
+
bun test --concurrent --max-concurrency 4
|
|
135
141
|
|
|
136
142
|
# Default: 20
|
|
137
|
-
|
|
143
|
+
bun test --concurrent
|
|
138
144
|
```
|
|
139
145
|
|
|
140
146
|
This helps prevent resource exhaustion when running many concurrent tests. The default value is 20.
|
|
@@ -143,7 +149,7 @@ This helps prevent resource exhaustion when running many concurrent tests. The d
|
|
|
143
149
|
|
|
144
150
|
Mark individual tests to run concurrently, even when the `--concurrent` flag is not used:
|
|
145
151
|
|
|
146
|
-
```ts
|
|
152
|
+
```ts title="math.test.ts" icon="/icons/typescript.svg"
|
|
147
153
|
import { test, expect } from "bun:test";
|
|
148
154
|
|
|
149
155
|
// These tests run in parallel with each other
|
|
@@ -167,7 +173,7 @@ test("sequential test", () => {
|
|
|
167
173
|
|
|
168
174
|
Force tests to run sequentially, even when the `--concurrent` flag is enabled:
|
|
169
175
|
|
|
170
|
-
```ts
|
|
176
|
+
```ts title="math.test.ts" icon="/icons/typescript.svg"
|
|
171
177
|
import { test, expect } from "bun:test";
|
|
172
178
|
|
|
173
179
|
let sharedState = 0;
|
|
@@ -199,22 +205,25 @@ test.failing.each([1, 2, 3])("chained qualifiers %d", input => {
|
|
|
199
205
|
|
|
200
206
|
Use the `--rerun-each` flag to run each test multiple times. This is useful for detecting flaky or non-deterministic test failures.
|
|
201
207
|
|
|
202
|
-
```sh
|
|
203
|
-
|
|
208
|
+
```sh terminal icon="terminal"
|
|
209
|
+
bun test --rerun-each 100
|
|
204
210
|
```
|
|
205
211
|
|
|
206
212
|
## Randomize test execution order
|
|
207
213
|
|
|
208
214
|
Use the `--randomize` flag to run tests in a random order. This helps detect tests that depend on shared state or execution order.
|
|
209
215
|
|
|
210
|
-
```sh
|
|
211
|
-
|
|
216
|
+
```sh terminal icon="terminal"
|
|
217
|
+
bun test --randomize
|
|
212
218
|
```
|
|
213
219
|
|
|
214
220
|
When using `--randomize`, the seed used for randomization will be displayed in the test summary:
|
|
215
221
|
|
|
216
|
-
```sh
|
|
217
|
-
|
|
222
|
+
```sh terminal icon="terminal"
|
|
223
|
+
bun test --randomize
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
```txt
|
|
218
227
|
# ... test output ...
|
|
219
228
|
--seed=12345
|
|
220
229
|
2 pass
|
|
@@ -226,9 +235,9 @@ Ran 10 tests across 2 files. [50.00ms]
|
|
|
226
235
|
|
|
227
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.
|
|
228
237
|
|
|
229
|
-
```sh
|
|
238
|
+
```sh terminal icon="terminal"
|
|
230
239
|
# Reproduce a previous randomized run
|
|
231
|
-
|
|
240
|
+
bun test --seed 123456
|
|
232
241
|
```
|
|
233
242
|
|
|
234
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.
|
|
@@ -237,47 +246,46 @@ The `--seed` flag implies `--randomize`, so you don't need to specify both. Usin
|
|
|
237
246
|
|
|
238
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.
|
|
239
248
|
|
|
240
|
-
```sh
|
|
249
|
+
```sh terminal icon="terminal"
|
|
241
250
|
# bail after 1 failure
|
|
242
|
-
|
|
251
|
+
bun test --bail
|
|
243
252
|
|
|
244
253
|
# bail after 10 failure
|
|
245
|
-
|
|
254
|
+
bun test --bail=10
|
|
246
255
|
```
|
|
247
256
|
|
|
248
257
|
## Watch mode
|
|
249
258
|
|
|
250
259
|
Similar to `bun run`, you can pass the `--watch` flag to `bun test` to watch for changes and re-run tests.
|
|
251
260
|
|
|
252
|
-
```bash
|
|
253
|
-
|
|
261
|
+
```bash terminal icon="terminal"
|
|
262
|
+
bun test --watch
|
|
254
263
|
```
|
|
255
264
|
|
|
256
265
|
## Lifecycle hooks
|
|
257
266
|
|
|
258
267
|
Bun supports the following lifecycle hooks:
|
|
259
268
|
|
|
260
|
-
| Hook
|
|
261
|
-
|
|
|
262
|
-
| `beforeAll`
|
|
263
|
-
| `beforeEach`
|
|
264
|
-
| `afterEach`
|
|
265
|
-
| `afterAll`
|
|
266
|
-
| `onTestFinished` | Runs after a test finishes, including after `afterEach`. |
|
|
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. |
|
|
267
275
|
|
|
268
276
|
These hooks can be defined inside test files, or in a separate file that is preloaded with the `--preload` flag.
|
|
269
277
|
|
|
270
|
-
```ts
|
|
271
|
-
|
|
278
|
+
```ts terminal icon="terminal"
|
|
279
|
+
bun test --preload ./setup.ts
|
|
272
280
|
```
|
|
273
281
|
|
|
274
|
-
See [Test > Lifecycle](
|
|
282
|
+
See [Test > Lifecycle](/test/lifecycle) for complete documentation.
|
|
275
283
|
|
|
276
284
|
## Mocks
|
|
277
285
|
|
|
278
286
|
Create mock functions with the `mock` function.
|
|
279
287
|
|
|
280
|
-
```ts
|
|
288
|
+
```ts title="math.test.ts" icon="/icons/typescript.svg"
|
|
281
289
|
import { test, expect, mock } from "bun:test";
|
|
282
290
|
const random = mock(() => Math.random());
|
|
283
291
|
|
|
@@ -291,21 +299,21 @@ test("random", () => {
|
|
|
291
299
|
|
|
292
300
|
Alternatively, you can use `jest.fn()`, it behaves identically.
|
|
293
301
|
|
|
294
|
-
```ts
|
|
295
|
-
|
|
296
|
-
|
|
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 ++]
|
|
297
305
|
|
|
298
|
-
|
|
299
|
-
|
|
306
|
+
const random = mock(() => Math.random()); // [!code --]
|
|
307
|
+
const random = jest.fn(() => Math.random()); // [!code ++]
|
|
300
308
|
```
|
|
301
309
|
|
|
302
|
-
See [Test > Mocks](
|
|
310
|
+
See [Test > Mocks](/test/mocks) for complete documentation.
|
|
303
311
|
|
|
304
312
|
## Snapshot testing
|
|
305
313
|
|
|
306
314
|
Snapshots are supported by `bun test`.
|
|
307
315
|
|
|
308
|
-
```ts
|
|
316
|
+
```ts title="math.test.ts" icon="/icons/typescript.svg"
|
|
309
317
|
// example usage of toMatchSnapshot
|
|
310
318
|
import { test, expect } from "bun:test";
|
|
311
319
|
|
|
@@ -316,11 +324,11 @@ test("snapshot", () => {
|
|
|
316
324
|
|
|
317
325
|
To update snapshots, use the `--update-snapshots` flag.
|
|
318
326
|
|
|
319
|
-
```sh
|
|
320
|
-
|
|
327
|
+
```sh terminal icon="terminal"
|
|
328
|
+
bun test --update-snapshots
|
|
321
329
|
```
|
|
322
330
|
|
|
323
|
-
See [Test > Snapshots](
|
|
331
|
+
See [Test > Snapshots](/test/snapshots) for complete documentation.
|
|
324
332
|
|
|
325
333
|
## UI & DOM testing
|
|
326
334
|
|
|
@@ -330,40 +338,13 @@ Bun is compatible with popular UI testing libraries:
|
|
|
330
338
|
- [DOM Testing Library](https://testing-library.com/docs/dom-testing-library/intro/)
|
|
331
339
|
- [React Testing Library](https://testing-library.com/docs/react-testing-library/intro)
|
|
332
340
|
|
|
333
|
-
See [Test > DOM Testing](
|
|
341
|
+
See [Test > DOM Testing](/test/dom) for complete documentation.
|
|
334
342
|
|
|
335
343
|
## Performance
|
|
336
344
|
|
|
337
345
|
Bun's test runner is fast.
|
|
338
346
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
<!--
|
|
342
|
-
Consider the following directory structure:
|
|
343
|
-
|
|
344
|
-
```
|
|
345
|
-
.
|
|
346
|
-
├── a.test.ts
|
|
347
|
-
├── b.test.ts
|
|
348
|
-
├── c.test.ts
|
|
349
|
-
└── foo
|
|
350
|
-
├── a.test.ts
|
|
351
|
-
└── b.test.ts
|
|
352
|
-
```
|
|
353
|
-
|
|
354
|
-
To run both `a.test.ts` files:
|
|
355
|
-
|
|
356
|
-
```
|
|
357
|
-
$ bun test a
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
To run all tests in the `foo` directory:
|
|
361
|
-
|
|
362
|
-
```
|
|
363
|
-
$ bun test foo
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
Any test file in the directory with an _absolute path_ that contains one of the targets will run. Glob patterns are not yet supported. -->
|
|
347
|
+
<Frame></Frame>
|
|
367
348
|
|
|
368
349
|
## AI Agent Integration
|
|
369
350
|
|
|
@@ -385,13 +366,15 @@ When an AI agent environment is detected:
|
|
|
385
366
|
- Passing, skipped, and todo test indicators are hidden
|
|
386
367
|
- Summary statistics remain intact
|
|
387
368
|
|
|
388
|
-
```bash
|
|
369
|
+
```bash terminal icon="terminal"
|
|
389
370
|
# Example: Enable quiet output for Claude Code
|
|
390
|
-
|
|
371
|
+
CLAUDECODE=1 bun test
|
|
391
372
|
|
|
392
373
|
# Still shows failures and summary, but hides verbose passing test output
|
|
393
374
|
```
|
|
394
375
|
|
|
395
376
|
This feature is particularly useful in AI-assisted development workflows where reduced output verbosity improves context efficiency while maintaining visibility into test failures.
|
|
396
377
|
|
|
397
|
-
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
<Test />
|