@depup/bun-types 1.3.11-depup.0
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/CLAUDE.md +105 -0
- package/README.md +25 -0
- package/bun.d.ts +8712 -0
- package/bun.ns.d.ts +5 -0
- package/bundle.d.ts +74 -0
- package/changes.json +5 -0
- package/deprecated.d.ts +184 -0
- package/devserver.d.ts +187 -0
- package/docs/README.md +28 -0
- package/docs/bundler/bytecode.mdx +447 -0
- package/docs/bundler/css.mdx +1024 -0
- package/docs/bundler/esbuild.mdx +304 -0
- package/docs/bundler/executables.mdx +1318 -0
- package/docs/bundler/fullstack.mdx +1086 -0
- package/docs/bundler/hot-reloading.mdx +229 -0
- package/docs/bundler/html-static.mdx +498 -0
- package/docs/bundler/index.mdx +1840 -0
- package/docs/bundler/loaders.mdx +451 -0
- package/docs/bundler/macros.mdx +328 -0
- package/docs/bundler/minifier.mdx +1286 -0
- package/docs/bundler/plugins.mdx +477 -0
- package/docs/bundler/standalone-html.mdx +314 -0
- package/docs/feedback.mdx +75 -0
- package/docs/guides/binary/arraybuffer-to-array.mdx +29 -0
- package/docs/guides/binary/arraybuffer-to-blob.mdx +26 -0
- package/docs/guides/binary/arraybuffer-to-buffer.mdx +27 -0
- package/docs/guides/binary/arraybuffer-to-string.mdx +17 -0
- package/docs/guides/binary/arraybuffer-to-typedarray.mdx +41 -0
- package/docs/guides/binary/blob-to-arraybuffer.mdx +16 -0
- package/docs/guides/binary/blob-to-dataview.mdx +16 -0
- package/docs/guides/binary/blob-to-stream.mdx +16 -0
- package/docs/guides/binary/blob-to-string.mdx +17 -0
- package/docs/guides/binary/blob-to-typedarray.mdx +16 -0
- package/docs/guides/binary/buffer-to-arraybuffer.mdx +16 -0
- package/docs/guides/binary/buffer-to-blob.mdx +16 -0
- package/docs/guides/binary/buffer-to-readablestream.mdx +43 -0
- package/docs/guides/binary/buffer-to-string.mdx +27 -0
- package/docs/guides/binary/buffer-to-typedarray.mdx +16 -0
- package/docs/guides/binary/dataview-to-string.mdx +17 -0
- package/docs/guides/binary/typedarray-to-arraybuffer.mdx +27 -0
- package/docs/guides/binary/typedarray-to-blob.mdx +18 -0
- package/docs/guides/binary/typedarray-to-buffer.mdx +16 -0
- package/docs/guides/binary/typedarray-to-dataview.mdx +16 -0
- package/docs/guides/binary/typedarray-to-readablestream.mdx +43 -0
- package/docs/guides/binary/typedarray-to-string.mdx +18 -0
- package/docs/guides/deployment/aws-lambda.mdx +204 -0
- package/docs/guides/deployment/digital-ocean.mdx +161 -0
- package/docs/guides/deployment/google-cloud-run.mdx +194 -0
- package/docs/guides/deployment/railway.mdx +145 -0
- package/docs/guides/deployment/render.mdx +82 -0
- package/docs/guides/deployment/vercel.mdx +97 -0
- package/docs/guides/ecosystem/astro.mdx +82 -0
- package/docs/guides/ecosystem/discordjs.mdx +80 -0
- package/docs/guides/ecosystem/docker.mdx +151 -0
- package/docs/guides/ecosystem/drizzle.mdx +195 -0
- package/docs/guides/ecosystem/elysia.mdx +31 -0
- package/docs/guides/ecosystem/express.mdx +43 -0
- package/docs/guides/ecosystem/gel.mdx +261 -0
- package/docs/guides/ecosystem/hono.mdx +47 -0
- package/docs/guides/ecosystem/mongoose.mdx +92 -0
- package/docs/guides/ecosystem/neon-drizzle.mdx +234 -0
- package/docs/guides/ecosystem/neon-serverless-postgres.mdx +60 -0
- package/docs/guides/ecosystem/nextjs.mdx +103 -0
- package/docs/guides/ecosystem/nuxt.mdx +96 -0
- package/docs/guides/ecosystem/pm2.mdx +55 -0
- package/docs/guides/ecosystem/prisma-postgres.mdx +169 -0
- package/docs/guides/ecosystem/prisma.mdx +164 -0
- package/docs/guides/ecosystem/qwik.mdx +114 -0
- package/docs/guides/ecosystem/react.mdx +52 -0
- package/docs/guides/ecosystem/remix.mdx +97 -0
- package/docs/guides/ecosystem/sentry.mdx +54 -0
- package/docs/guides/ecosystem/solidstart.mdx +62 -0
- package/docs/guides/ecosystem/ssr-react.mdx +49 -0
- package/docs/guides/ecosystem/stric.mdx +54 -0
- package/docs/guides/ecosystem/sveltekit.mdx +138 -0
- package/docs/guides/ecosystem/systemd.mdx +114 -0
- package/docs/guides/ecosystem/tanstack-start.mdx +791 -0
- package/docs/guides/ecosystem/upstash.mdx +87 -0
- package/docs/guides/ecosystem/vite.mdx +77 -0
- package/docs/guides/html-rewriter/extract-links.mdx +71 -0
- package/docs/guides/html-rewriter/extract-social-meta.mdx +97 -0
- package/docs/guides/http/cluster.mdx +69 -0
- package/docs/guides/http/fetch-unix.mdx +35 -0
- package/docs/guides/http/fetch.mdx +26 -0
- package/docs/guides/http/file-uploads.mdx +97 -0
- package/docs/guides/http/hot.mdx +28 -0
- package/docs/guides/http/proxy.mdx +50 -0
- package/docs/guides/http/server.mdx +48 -0
- package/docs/guides/http/simple.mdx +20 -0
- package/docs/guides/http/sse.mdx +91 -0
- package/docs/guides/http/stream-file.mdx +50 -0
- package/docs/guides/http/stream-iterator.mdx +49 -0
- package/docs/guides/http/stream-node-streams-in-bun.mdx +22 -0
- package/docs/guides/http/tls.mdx +32 -0
- package/docs/guides/index.mdx +10 -0
- package/docs/guides/install/add-dev.mdx +28 -0
- package/docs/guides/install/add-git.mdx +40 -0
- package/docs/guides/install/add-optional.mdx +27 -0
- package/docs/guides/install/add-peer.mdx +45 -0
- package/docs/guides/install/add-tarball.mdx +35 -0
- package/docs/guides/install/add.mdx +44 -0
- package/docs/guides/install/azure-artifacts.mdx +76 -0
- package/docs/guides/install/cicd.mdx +43 -0
- package/docs/guides/install/custom-registry.mdx +32 -0
- package/docs/guides/install/from-npm-install-to-bun-install.mdx +230 -0
- package/docs/guides/install/git-diff-bun-lockfile.mdx +48 -0
- package/docs/guides/install/jfrog-artifactory.mdx +28 -0
- package/docs/guides/install/npm-alias.mdx +25 -0
- package/docs/guides/install/registry-scope.mdx +40 -0
- package/docs/guides/install/trusted.mdx +52 -0
- package/docs/guides/install/workspaces.mdx +70 -0
- package/docs/guides/install/yarnlock.mdx +51 -0
- package/docs/guides/process/argv.mdx +66 -0
- package/docs/guides/process/ctrl-c.mdx +18 -0
- package/docs/guides/process/ipc.mdx +69 -0
- package/docs/guides/process/nanoseconds.mdx +15 -0
- package/docs/guides/process/os-signals.mdx +31 -0
- package/docs/guides/process/spawn-stderr.mdx +34 -0
- package/docs/guides/process/spawn-stdout.mdx +28 -0
- package/docs/guides/process/spawn.mdx +43 -0
- package/docs/guides/process/stdin.mdx +62 -0
- package/docs/guides/read-file/arraybuffer.mdx +30 -0
- package/docs/guides/read-file/buffer.mdx +21 -0
- package/docs/guides/read-file/exists.mdx +18 -0
- package/docs/guides/read-file/json.mdx +19 -0
- package/docs/guides/read-file/mime.mdx +22 -0
- package/docs/guides/read-file/stream.mdx +28 -0
- package/docs/guides/read-file/string.mdx +24 -0
- package/docs/guides/read-file/uint8array.mdx +23 -0
- package/docs/guides/read-file/watch.mdx +66 -0
- package/docs/guides/runtime/build-time-constants.mdx +295 -0
- package/docs/guides/runtime/cicd.mdx +45 -0
- package/docs/guides/runtime/codesign-macos-executable.mdx +61 -0
- package/docs/guides/runtime/define-constant.mdx +149 -0
- package/docs/guides/runtime/delete-directory.mdx +39 -0
- package/docs/guides/runtime/delete-file.mdx +21 -0
- package/docs/guides/runtime/heap-snapshot.mdx +28 -0
- package/docs/guides/runtime/import-html.mdx +15 -0
- package/docs/guides/runtime/import-json.mdx +46 -0
- package/docs/guides/runtime/import-json5.mdx +74 -0
- package/docs/guides/runtime/import-toml.mdx +32 -0
- package/docs/guides/runtime/import-yaml.mdx +104 -0
- package/docs/guides/runtime/read-env.mdx +37 -0
- package/docs/guides/runtime/set-env.mdx +51 -0
- package/docs/guides/runtime/shell.mdx +42 -0
- package/docs/guides/runtime/timezone.mdx +38 -0
- package/docs/guides/runtime/tsconfig-paths.mdx +31 -0
- package/docs/guides/runtime/typescript.mdx +51 -0
- package/docs/guides/runtime/vscode-debugger.mdx +47 -0
- package/docs/guides/runtime/web-debugger.mdx +103 -0
- package/docs/guides/streams/node-readable-to-arraybuffer.mdx +13 -0
- package/docs/guides/streams/node-readable-to-blob.mdx +13 -0
- package/docs/guides/streams/node-readable-to-json.mdx +14 -0
- package/docs/guides/streams/node-readable-to-string.mdx +14 -0
- package/docs/guides/streams/node-readable-to-uint8array.mdx +13 -0
- package/docs/guides/streams/to-array.mdx +16 -0
- package/docs/guides/streams/to-arraybuffer.mdx +16 -0
- package/docs/guides/streams/to-blob.mdx +16 -0
- package/docs/guides/streams/to-buffer.mdx +17 -0
- package/docs/guides/streams/to-json.mdx +16 -0
- package/docs/guides/streams/to-string.mdx +16 -0
- package/docs/guides/streams/to-typedarray.mdx +24 -0
- package/docs/guides/test/bail.mdx +24 -0
- package/docs/guides/test/concurrent-test-glob.mdx +146 -0
- package/docs/guides/test/coverage-threshold.mdx +67 -0
- package/docs/guides/test/coverage.mdx +49 -0
- package/docs/guides/test/happy-dom.mdx +73 -0
- package/docs/guides/test/migrate-from-jest.mdx +125 -0
- package/docs/guides/test/mock-clock.mdx +50 -0
- package/docs/guides/test/mock-functions.mdx +70 -0
- package/docs/guides/test/rerun-each.mdx +16 -0
- package/docs/guides/test/run-tests.mdx +116 -0
- package/docs/guides/test/skip-tests.mdx +43 -0
- package/docs/guides/test/snapshot.mdx +102 -0
- package/docs/guides/test/spy-on.mdx +49 -0
- package/docs/guides/test/svelte-test.mdx +113 -0
- package/docs/guides/test/testing-library.mdx +93 -0
- package/docs/guides/test/timeout.mdx +17 -0
- package/docs/guides/test/todo-tests.mdx +74 -0
- package/docs/guides/test/update-snapshots.mdx +49 -0
- package/docs/guides/test/watch-mode.mdx +24 -0
- package/docs/guides/util/base64.mdx +17 -0
- package/docs/guides/util/deep-equals.mdx +41 -0
- package/docs/guides/util/deflate.mdx +20 -0
- package/docs/guides/util/detect-bun.mdx +28 -0
- package/docs/guides/util/entrypoint.mdx +19 -0
- package/docs/guides/util/escape-html.mdx +24 -0
- package/docs/guides/util/file-url-to-path.mdx +16 -0
- package/docs/guides/util/gzip.mdx +20 -0
- package/docs/guides/util/hash-a-password.mdx +56 -0
- package/docs/guides/util/import-meta-dir.mdx +15 -0
- package/docs/guides/util/import-meta-file.mdx +15 -0
- package/docs/guides/util/import-meta-path.mdx +15 -0
- package/docs/guides/util/javascript-uuid.mdx +25 -0
- package/docs/guides/util/main.mdx +43 -0
- package/docs/guides/util/path-to-file-url.mdx +16 -0
- package/docs/guides/util/sleep.mdx +24 -0
- package/docs/guides/util/upgrade.mdx +93 -0
- package/docs/guides/util/version.mdx +23 -0
- package/docs/guides/util/which-path-to-executable-bin.mdx +17 -0
- package/docs/guides/websocket/compression.mdx +33 -0
- package/docs/guides/websocket/context.mdx +79 -0
- package/docs/guides/websocket/pubsub.mdx +43 -0
- package/docs/guides/websocket/simple.mdx +38 -0
- package/docs/guides/write-file/append.mdx +54 -0
- package/docs/guides/write-file/basic.mdx +46 -0
- package/docs/guides/write-file/blob.mdx +30 -0
- package/docs/guides/write-file/cat.mdx +19 -0
- package/docs/guides/write-file/file-cp.mdx +18 -0
- package/docs/guides/write-file/filesink.mdx +54 -0
- package/docs/guides/write-file/response.mdx +19 -0
- package/docs/guides/write-file/stdout.mdx +23 -0
- package/docs/guides/write-file/stream.mdx +19 -0
- package/docs/guides/write-file/unlink.mdx +18 -0
- package/docs/index.mdx +133 -0
- package/docs/installation.mdx +372 -0
- package/docs/pm/bunx.mdx +91 -0
- package/docs/pm/catalogs.mdx +292 -0
- package/docs/pm/cli/add.mdx +179 -0
- package/docs/pm/cli/audit.mdx +60 -0
- package/docs/pm/cli/info.mdx +70 -0
- package/docs/pm/cli/install.mdx +591 -0
- package/docs/pm/cli/link.mdx +61 -0
- package/docs/pm/cli/outdated.mdx +197 -0
- package/docs/pm/cli/patch.mdx +69 -0
- package/docs/pm/cli/pm.mdx +323 -0
- package/docs/pm/cli/publish.mdx +131 -0
- package/docs/pm/cli/remove.mdx +16 -0
- package/docs/pm/cli/update.mdx +140 -0
- package/docs/pm/cli/why.mdx +84 -0
- package/docs/pm/filter.mdx +127 -0
- package/docs/pm/global-cache.mdx +72 -0
- package/docs/pm/isolated-installs.mdx +220 -0
- package/docs/pm/lifecycle.mdx +64 -0
- package/docs/pm/lockfile.mdx +64 -0
- package/docs/pm/npmrc.mdx +245 -0
- package/docs/pm/overrides.mdx +83 -0
- package/docs/pm/scopes-registries.mdx +35 -0
- package/docs/pm/security-scanner-api.mdx +95 -0
- package/docs/pm/workspaces.mdx +115 -0
- package/docs/project/benchmarking.mdx +296 -0
- package/docs/project/bindgen.mdx +223 -0
- package/docs/project/building-windows.mdx +143 -0
- package/docs/project/contributing.mdx +366 -0
- package/docs/project/feedback.mdx +20 -0
- package/docs/project/license.mdx +78 -0
- package/docs/project/roadmap.mdx +8 -0
- package/docs/quickstart.mdx +251 -0
- package/docs/runtime/archive.mdx +452 -0
- package/docs/runtime/auto-install.mdx +97 -0
- package/docs/runtime/binary-data.mdx +846 -0
- package/docs/runtime/bun-apis.mdx +60 -0
- package/docs/runtime/bunfig.mdx +765 -0
- package/docs/runtime/c-compiler.mdx +204 -0
- package/docs/runtime/child-process.mdx +659 -0
- package/docs/runtime/color.mdx +267 -0
- package/docs/runtime/console.mdx +67 -0
- package/docs/runtime/cookies.mdx +454 -0
- package/docs/runtime/cron.mdx +358 -0
- package/docs/runtime/csrf.mdx +171 -0
- package/docs/runtime/debugger.mdx +335 -0
- package/docs/runtime/environment-variables.mdx +231 -0
- package/docs/runtime/ffi.mdx +567 -0
- package/docs/runtime/file-io.mdx +306 -0
- package/docs/runtime/file-system-router.mdx +118 -0
- package/docs/runtime/file-types.mdx +482 -0
- package/docs/runtime/glob.mdx +181 -0
- package/docs/runtime/globals.mdx +72 -0
- package/docs/runtime/hashing.mdx +315 -0
- package/docs/runtime/html-rewriter.mdx +333 -0
- package/docs/runtime/http/cookies.mdx +79 -0
- package/docs/runtime/http/error-handling.mdx +40 -0
- package/docs/runtime/http/metrics.mdx +36 -0
- package/docs/runtime/http/routing.mdx +289 -0
- package/docs/runtime/http/server.mdx +672 -0
- package/docs/runtime/http/tls.mdx +101 -0
- package/docs/runtime/http/websockets.mdx +414 -0
- package/docs/runtime/index.mdx +223 -0
- package/docs/runtime/json5.mdx +271 -0
- package/docs/runtime/jsonl.mdx +188 -0
- package/docs/runtime/jsx.mdx +115 -0
- package/docs/runtime/markdown.mdx +381 -0
- package/docs/runtime/module-resolution.mdx +374 -0
- package/docs/runtime/networking/dns.mdx +111 -0
- package/docs/runtime/networking/fetch.mdx +484 -0
- package/docs/runtime/networking/tcp.mdx +239 -0
- package/docs/runtime/networking/udp.mdx +180 -0
- package/docs/runtime/node-api.mdx +19 -0
- package/docs/runtime/nodejs-compat.mdx +468 -0
- package/docs/runtime/plugins.mdx +419 -0
- package/docs/runtime/redis.mdx +583 -0
- package/docs/runtime/repl.mdx +176 -0
- package/docs/runtime/s3.mdx +881 -0
- package/docs/runtime/secrets.mdx +340 -0
- package/docs/runtime/semver.mdx +57 -0
- package/docs/runtime/shell.mdx +637 -0
- package/docs/runtime/sql.mdx +1404 -0
- package/docs/runtime/sqlite.mdx +721 -0
- package/docs/runtime/streams.mdx +232 -0
- package/docs/runtime/templating/create.mdx +269 -0
- package/docs/runtime/templating/init.mdx +58 -0
- package/docs/runtime/toml.mdx +238 -0
- package/docs/runtime/transpiler.mdx +288 -0
- package/docs/runtime/typescript.mdx +58 -0
- package/docs/runtime/utils.mdx +1010 -0
- package/docs/runtime/watch-mode.mdx +161 -0
- package/docs/runtime/web-apis.mdx +29 -0
- package/docs/runtime/workers.mdx +314 -0
- package/docs/runtime/yaml.mdx +470 -0
- package/docs/snippets/cli/add.mdx +166 -0
- package/docs/snippets/cli/build.mdx +197 -0
- package/docs/snippets/cli/bunx.mdx +49 -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 +305 -0
- package/docs/snippets/cli/test.mdx +105 -0
- package/docs/snippets/cli/update.mdx +144 -0
- package/docs/test/code-coverage.mdx +409 -0
- package/docs/test/configuration.mdx +574 -0
- package/docs/test/dates-times.mdx +129 -0
- package/docs/test/discovery.mdx +90 -0
- package/docs/test/dom.mdx +226 -0
- package/docs/test/index.mdx +409 -0
- package/docs/test/lifecycle.mdx +366 -0
- package/docs/test/mocks.mdx +637 -0
- package/docs/test/reporters.mdx +126 -0
- package/docs/test/runtime-behavior.mdx +342 -0
- package/docs/test/snapshots.mdx +434 -0
- package/docs/test/writing-tests.mdx +672 -0
- package/docs/typescript.mdx +54 -0
- package/extensions.d.ts +40 -0
- package/fetch.d.ts +79 -0
- package/ffi.d.ts +1154 -0
- package/globals.d.ts +2067 -0
- package/html-rewriter.d.ts +186 -0
- package/index.d.ts +32 -0
- package/jsc.d.ts +233 -0
- package/jsx.d.ts +11 -0
- package/overrides.d.ts +376 -0
- package/package.json +53 -0
- package/redis.d.ts +3352 -0
- package/s3.d.ts +1354 -0
- package/security.d.ts +101 -0
- package/serve.d.ts +1296 -0
- package/shell.d.ts +380 -0
- package/sql.d.ts +887 -0
- package/sqlite.d.ts +1322 -0
- package/test-globals.d.ts +22 -0
- package/test.d.ts +2392 -0
- package/vendor/expect-type/branding.d.ts +283 -0
- package/vendor/expect-type/index.d.ts +1207 -0
- package/vendor/expect-type/messages.d.ts +395 -0
- package/vendor/expect-type/overloads.d.ts +669 -0
- package/vendor/expect-type/utils.d.ts +431 -0
- package/wasm.d.ts +193 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Finding tests"
|
|
3
|
+
description: "Learn how Bun's test runner discovers and filters test files in your project"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
bun test's file discovery mechanism determines which files to run as tests. Understanding how it works helps you structure your test files effectively.
|
|
7
|
+
|
|
8
|
+
## Default Discovery Logic
|
|
9
|
+
|
|
10
|
+
By default, `bun test` recursively searches the project directory for files that match specific patterns:
|
|
11
|
+
|
|
12
|
+
- `*.test.{js|jsx|ts|tsx}` - Files ending with `.test.js`, `.test.jsx`, `.test.ts`, or `.test.tsx`
|
|
13
|
+
- `*_test.{js|jsx|ts|tsx}` - Files ending with `_test.js`, `_test.jsx`, `_test.ts`, or `_test.tsx`
|
|
14
|
+
- `*.spec.{js|jsx|ts|tsx}` - Files ending with `.spec.js`, `.spec.jsx`, `.spec.ts`, or `.spec.tsx`
|
|
15
|
+
- `*_spec.{js|jsx|ts|tsx}` - Files ending with `_spec.js`, `_spec.jsx`, `_spec.ts`, or `_spec.tsx`
|
|
16
|
+
|
|
17
|
+
## Exclusions
|
|
18
|
+
|
|
19
|
+
By default, Bun test ignores:
|
|
20
|
+
|
|
21
|
+
- `node_modules` directories
|
|
22
|
+
- Hidden directories (those starting with a period `.`)
|
|
23
|
+
- Files that don't have JavaScript-like extensions (based on available loaders)
|
|
24
|
+
|
|
25
|
+
## Customizing Test Discovery
|
|
26
|
+
|
|
27
|
+
### Position Arguments as Filters
|
|
28
|
+
|
|
29
|
+
You can filter which test files run by passing additional positional arguments to `bun test`:
|
|
30
|
+
|
|
31
|
+
```bash terminal icon="terminal"
|
|
32
|
+
bun test <filter> <filter> ...
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Any test file with a path that contains one of the filters will run. These filters are simple substring matches, not glob patterns.
|
|
36
|
+
|
|
37
|
+
For example, to run all tests in a `utils` directory:
|
|
38
|
+
|
|
39
|
+
```bash terminal icon="terminal"
|
|
40
|
+
bun test utils
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
This would match files like `src/utils/string.test.ts` and `lib/utils/array_test.js`.
|
|
44
|
+
|
|
45
|
+
### Specifying Exact File Paths
|
|
46
|
+
|
|
47
|
+
To run a specific file in the test runner, make sure the path starts with `./` or `/` to distinguish it from a filter name:
|
|
48
|
+
|
|
49
|
+
```bash terminal icon="terminal"
|
|
50
|
+
bun test ./test/specific-file.test.ts
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Filter by Test Name
|
|
54
|
+
|
|
55
|
+
To filter tests by name rather than file path, use the `-t`/`--test-name-pattern` flag with a regex pattern:
|
|
56
|
+
|
|
57
|
+
```sh terminal icon="terminal"
|
|
58
|
+
# run all tests with "addition" in the name
|
|
59
|
+
bun test --test-name-pattern addition
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The pattern is matched against a concatenated string of the test name prepended with the labels of all its parent describe blocks, separated by spaces. For example, a test defined as:
|
|
63
|
+
|
|
64
|
+
```ts title="math.test.ts" icon="/icons/typescript.svg"
|
|
65
|
+
describe("Math", () => {
|
|
66
|
+
describe("operations", () => {
|
|
67
|
+
test("should add correctly", () => {
|
|
68
|
+
// ...
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Would be matched against the string "Math operations should add correctly".
|
|
75
|
+
|
|
76
|
+
### Changing the Root Directory
|
|
77
|
+
|
|
78
|
+
By default, Bun looks for test files starting from the current working directory. You can change this with the `root` option in your `bunfig.toml`:
|
|
79
|
+
|
|
80
|
+
```toml title="bunfig.toml" icon="settings"
|
|
81
|
+
[test]
|
|
82
|
+
root = "src" # Only scan for tests in the src directory
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Execution Order
|
|
86
|
+
|
|
87
|
+
Tests are run in the following order:
|
|
88
|
+
|
|
89
|
+
1. Test files are executed sequentially (not in parallel)
|
|
90
|
+
2. Within each file, tests run sequentially based on their definition order
|
|
@@ -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.3.3
|
|
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
|
+
```
|