bun-types 1.3.2-canary.20251104T140728 → 1.3.2-canary.20251106T140813

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 (312) hide show
  1. package/bun.d.ts +4 -4
  2. package/docs/README.md +28 -0
  3. package/globals.d.ts +0 -1
  4. package/overrides.d.ts +45 -15
  5. package/package.json +1 -1
  6. package/test.d.ts +1 -1
  7. package/docs/api/binary-data.md +0 -1038
  8. package/docs/api/cc.md +0 -197
  9. package/docs/api/color.md +0 -262
  10. package/docs/api/console.md +0 -57
  11. package/docs/api/cookie.md +0 -449
  12. package/docs/api/dns.md +0 -110
  13. package/docs/api/fetch.md +0 -463
  14. package/docs/api/ffi.md +0 -557
  15. package/docs/api/file-io.md +0 -366
  16. package/docs/api/file-system-router.md +0 -112
  17. package/docs/api/file.md +0 -19
  18. package/docs/api/glob.md +0 -178
  19. package/docs/api/globals.md +0 -387
  20. package/docs/api/hashing.md +0 -319
  21. package/docs/api/html-rewriter.md +0 -334
  22. package/docs/api/http.md +0 -1408
  23. package/docs/api/import-meta.md +0 -69
  24. package/docs/api/node-api.md +0 -14
  25. package/docs/api/redis.md +0 -597
  26. package/docs/api/s3.md +0 -850
  27. package/docs/api/secrets.md +0 -319
  28. package/docs/api/semver.md +0 -52
  29. package/docs/api/spawn.md +0 -582
  30. package/docs/api/sql.md +0 -1374
  31. package/docs/api/sqlite.md +0 -694
  32. package/docs/api/streams.md +0 -230
  33. package/docs/api/tcp.md +0 -221
  34. package/docs/api/transpiler.md +0 -276
  35. package/docs/api/udp.md +0 -123
  36. package/docs/api/utils.md +0 -891
  37. package/docs/api/websockets.md +0 -573
  38. package/docs/api/workers.md +0 -322
  39. package/docs/api/yaml.md +0 -668
  40. package/docs/benchmarks.md +0 -120
  41. package/docs/bun-flavored-toml.md +0 -42
  42. package/docs/bundler/css.md +0 -1028
  43. package/docs/bundler/css_modules.md +0 -145
  44. package/docs/bundler/executables.md +0 -626
  45. package/docs/bundler/fullstack.md +0 -418
  46. package/docs/bundler/hmr.md +0 -234
  47. package/docs/bundler/html.md +0 -349
  48. package/docs/bundler/index.md +0 -1735
  49. package/docs/bundler/intro.md +0 -75
  50. package/docs/bundler/loaders.md +0 -410
  51. package/docs/bundler/macros.md +0 -329
  52. package/docs/bundler/plugins.md +0 -449
  53. package/docs/bundler/vs-esbuild.md +0 -1127
  54. package/docs/cli/add.md +0 -173
  55. package/docs/cli/bun-completions.md +0 -3
  56. package/docs/cli/bun-create.md +0 -338
  57. package/docs/cli/bun-install.md +0 -349
  58. package/docs/cli/bun-upgrade.md +0 -39
  59. package/docs/cli/bunx.md +0 -89
  60. package/docs/cli/filter.md +0 -90
  61. package/docs/cli/info.md +0 -65
  62. package/docs/cli/init.md +0 -85
  63. package/docs/cli/install.md +0 -344
  64. package/docs/cli/link.md +0 -40
  65. package/docs/cli/outdated.md +0 -90
  66. package/docs/cli/patch-commit.md +0 -11
  67. package/docs/cli/pm.md +0 -285
  68. package/docs/cli/publish.md +0 -120
  69. package/docs/cli/remove.md +0 -7
  70. package/docs/cli/run.md +0 -261
  71. package/docs/cli/test.md +0 -397
  72. package/docs/cli/unlink.md +0 -9
  73. package/docs/cli/update.md +0 -129
  74. package/docs/cli/why.md +0 -67
  75. package/docs/contributing/upgrading-webkit.md +0 -57
  76. package/docs/ecosystem/elysia.md +0 -24
  77. package/docs/ecosystem/express.md +0 -37
  78. package/docs/ecosystem/hono.md +0 -18
  79. package/docs/ecosystem/react.md +0 -65
  80. package/docs/ecosystem/stric.md +0 -38
  81. package/docs/guides/binary/arraybuffer-to-array.md +0 -27
  82. package/docs/guides/binary/arraybuffer-to-blob.md +0 -24
  83. package/docs/guides/binary/arraybuffer-to-buffer.md +0 -25
  84. package/docs/guides/binary/arraybuffer-to-string.md +0 -15
  85. package/docs/guides/binary/arraybuffer-to-typedarray.md +0 -39
  86. package/docs/guides/binary/blob-to-arraybuffer.md +0 -14
  87. package/docs/guides/binary/blob-to-dataview.md +0 -14
  88. package/docs/guides/binary/blob-to-stream.md +0 -14
  89. package/docs/guides/binary/blob-to-string.md +0 -15
  90. package/docs/guides/binary/blob-to-typedarray.md +0 -14
  91. package/docs/guides/binary/buffer-to-arraybuffer.md +0 -14
  92. package/docs/guides/binary/buffer-to-blob.md +0 -14
  93. package/docs/guides/binary/buffer-to-readablestream.md +0 -41
  94. package/docs/guides/binary/buffer-to-string.md +0 -25
  95. package/docs/guides/binary/buffer-to-typedarray.md +0 -14
  96. package/docs/guides/binary/dataview-to-string.md +0 -15
  97. package/docs/guides/binary/typedarray-to-arraybuffer.md +0 -25
  98. package/docs/guides/binary/typedarray-to-blob.md +0 -16
  99. package/docs/guides/binary/typedarray-to-buffer.md +0 -14
  100. package/docs/guides/binary/typedarray-to-dataview.md +0 -14
  101. package/docs/guides/binary/typedarray-to-readablestream.md +0 -41
  102. package/docs/guides/binary/typedarray-to-string.md +0 -16
  103. package/docs/guides/deployment/railway.md +0 -157
  104. package/docs/guides/ecosystem/astro.md +0 -72
  105. package/docs/guides/ecosystem/discordjs.md +0 -77
  106. package/docs/guides/ecosystem/docker.md +0 -140
  107. package/docs/guides/ecosystem/drizzle.md +0 -185
  108. package/docs/guides/ecosystem/edgedb.md +0 -228
  109. package/docs/guides/ecosystem/elysia.md +0 -31
  110. package/docs/guides/ecosystem/express.md +0 -40
  111. package/docs/guides/ecosystem/hono.md +0 -39
  112. package/docs/guides/ecosystem/mongoose.md +0 -87
  113. package/docs/guides/ecosystem/neon-drizzle.md +0 -220
  114. package/docs/guides/ecosystem/neon-serverless-postgres.md +0 -55
  115. package/docs/guides/ecosystem/nextjs.md +0 -49
  116. package/docs/guides/ecosystem/nuxt.md +0 -56
  117. package/docs/guides/ecosystem/pm2.md +0 -57
  118. package/docs/guides/ecosystem/prisma.md +0 -141
  119. package/docs/guides/ecosystem/qwik.md +0 -107
  120. package/docs/guides/ecosystem/react.md +0 -50
  121. package/docs/guides/ecosystem/remix.md +0 -78
  122. package/docs/guides/ecosystem/render.md +0 -79
  123. package/docs/guides/ecosystem/sentry.md +0 -52
  124. package/docs/guides/ecosystem/solidstart.md +0 -58
  125. package/docs/guides/ecosystem/ssr-react.md +0 -51
  126. package/docs/guides/ecosystem/stric.md +0 -55
  127. package/docs/guides/ecosystem/sveltekit.md +0 -125
  128. package/docs/guides/ecosystem/systemd.md +0 -113
  129. package/docs/guides/ecosystem/vite.md +0 -71
  130. package/docs/guides/html-rewriter/extract-links.md +0 -68
  131. package/docs/guides/html-rewriter/extract-social-meta.md +0 -93
  132. package/docs/guides/http/cluster.md +0 -66
  133. package/docs/guides/http/fetch-unix.md +0 -33
  134. package/docs/guides/http/fetch.md +0 -24
  135. package/docs/guides/http/file-uploads.md +0 -94
  136. package/docs/guides/http/hot.md +0 -26
  137. package/docs/guides/http/proxy.md +0 -24
  138. package/docs/guides/http/server.md +0 -46
  139. package/docs/guides/http/simple.md +0 -18
  140. package/docs/guides/http/stream-file.md +0 -48
  141. package/docs/guides/http/stream-iterator.md +0 -47
  142. package/docs/guides/http/stream-node-streams-in-bun.md +0 -20
  143. package/docs/guides/http/tls.md +0 -30
  144. package/docs/guides/install/add-dev.md +0 -26
  145. package/docs/guides/install/add-git.md +0 -36
  146. package/docs/guides/install/add-optional.md +0 -25
  147. package/docs/guides/install/add-peer.md +0 -43
  148. package/docs/guides/install/add-tarball.md +0 -33
  149. package/docs/guides/install/add.md +0 -42
  150. package/docs/guides/install/azure-artifacts.md +0 -73
  151. package/docs/guides/install/cicd.md +0 -41
  152. package/docs/guides/install/custom-registry.md +0 -30
  153. package/docs/guides/install/from-npm-install-to-bun-install.md +0 -214
  154. package/docs/guides/install/git-diff-bun-lockfile.md +0 -44
  155. package/docs/guides/install/jfrog-artifactory.md +0 -28
  156. package/docs/guides/install/npm-alias.md +0 -23
  157. package/docs/guides/install/registry-scope.md +0 -38
  158. package/docs/guides/install/trusted.md +0 -46
  159. package/docs/guides/install/workspaces.md +0 -70
  160. package/docs/guides/install/yarnlock.md +0 -44
  161. package/docs/guides/process/argv.md +0 -58
  162. package/docs/guides/process/ctrl-c.md +0 -16
  163. package/docs/guides/process/ipc.md +0 -66
  164. package/docs/guides/process/nanoseconds.md +0 -13
  165. package/docs/guides/process/os-signals.md +0 -39
  166. package/docs/guides/process/spawn-stderr.md +0 -31
  167. package/docs/guides/process/spawn-stdout.md +0 -26
  168. package/docs/guides/process/spawn.md +0 -41
  169. package/docs/guides/process/stdin.md +0 -54
  170. package/docs/guides/read-file/arraybuffer.md +0 -28
  171. package/docs/guides/read-file/buffer.md +0 -19
  172. package/docs/guides/read-file/exists.md +0 -16
  173. package/docs/guides/read-file/json.md +0 -17
  174. package/docs/guides/read-file/mime.md +0 -20
  175. package/docs/guides/read-file/stream.md +0 -26
  176. package/docs/guides/read-file/string.md +0 -22
  177. package/docs/guides/read-file/uint8array.md +0 -21
  178. package/docs/guides/read-file/watch.md +0 -68
  179. package/docs/guides/runtime/build-time-constants.md +0 -293
  180. package/docs/guides/runtime/cicd.md +0 -43
  181. package/docs/guides/runtime/codesign-macos-executable.md +0 -56
  182. package/docs/guides/runtime/define-constant.md +0 -145
  183. package/docs/guides/runtime/delete-directory.md +0 -37
  184. package/docs/guides/runtime/delete-file.md +0 -19
  185. package/docs/guides/runtime/heap-snapshot.md +0 -26
  186. package/docs/guides/runtime/import-html.md +0 -15
  187. package/docs/guides/runtime/import-json.md +0 -44
  188. package/docs/guides/runtime/import-toml.md +0 -30
  189. package/docs/guides/runtime/import-yaml.md +0 -102
  190. package/docs/guides/runtime/read-env.md +0 -32
  191. package/docs/guides/runtime/set-env.md +0 -47
  192. package/docs/guides/runtime/shell.md +0 -40
  193. package/docs/guides/runtime/timezone.md +0 -35
  194. package/docs/guides/runtime/tsconfig-paths.md +0 -29
  195. package/docs/guides/runtime/typescript.md +0 -49
  196. package/docs/guides/runtime/vscode-debugger.md +0 -47
  197. package/docs/guides/runtime/web-debugger.md +0 -82
  198. package/docs/guides/streams/node-readable-to-arraybuffer.md +0 -11
  199. package/docs/guides/streams/node-readable-to-blob.md +0 -11
  200. package/docs/guides/streams/node-readable-to-json.md +0 -12
  201. package/docs/guides/streams/node-readable-to-string.md +0 -12
  202. package/docs/guides/streams/node-readable-to-uint8array.md +0 -11
  203. package/docs/guides/streams/to-array.md +0 -14
  204. package/docs/guides/streams/to-arraybuffer.md +0 -14
  205. package/docs/guides/streams/to-blob.md +0 -14
  206. package/docs/guides/streams/to-buffer.md +0 -15
  207. package/docs/guides/streams/to-json.md +0 -14
  208. package/docs/guides/streams/to-string.md +0 -14
  209. package/docs/guides/streams/to-typedarray.md +0 -22
  210. package/docs/guides/test/bail.md +0 -22
  211. package/docs/guides/test/coverage-threshold.md +0 -60
  212. package/docs/guides/test/coverage.md +0 -44
  213. package/docs/guides/test/happy-dom.md +0 -68
  214. package/docs/guides/test/migrate-from-jest.md +0 -143
  215. package/docs/guides/test/mock-clock.md +0 -48
  216. package/docs/guides/test/mock-functions.md +0 -68
  217. package/docs/guides/test/rerun-each.md +0 -14
  218. package/docs/guides/test/run-tests.md +0 -111
  219. package/docs/guides/test/skip-tests.md +0 -39
  220. package/docs/guides/test/snapshot.md +0 -95
  221. package/docs/guides/test/spy-on.md +0 -46
  222. package/docs/guides/test/svelte-test.md +0 -120
  223. package/docs/guides/test/testing-library.md +0 -92
  224. package/docs/guides/test/timeout.md +0 -15
  225. package/docs/guides/test/todo-tests.md +0 -67
  226. package/docs/guides/test/update-snapshots.md +0 -46
  227. package/docs/guides/test/watch-mode.md +0 -19
  228. package/docs/guides/util/base64.md +0 -15
  229. package/docs/guides/util/deep-equals.md +0 -39
  230. package/docs/guides/util/deflate.md +0 -18
  231. package/docs/guides/util/detect-bun.md +0 -23
  232. package/docs/guides/util/entrypoint.md +0 -17
  233. package/docs/guides/util/escape-html.md +0 -22
  234. package/docs/guides/util/file-url-to-path.md +0 -14
  235. package/docs/guides/util/gzip.md +0 -18
  236. package/docs/guides/util/hash-a-password.md +0 -54
  237. package/docs/guides/util/import-meta-dir.md +0 -13
  238. package/docs/guides/util/import-meta-file.md +0 -13
  239. package/docs/guides/util/import-meta-path.md +0 -13
  240. package/docs/guides/util/javascript-uuid.md +0 -23
  241. package/docs/guides/util/main.md +0 -32
  242. package/docs/guides/util/path-to-file-url.md +0 -14
  243. package/docs/guides/util/sleep.md +0 -22
  244. package/docs/guides/util/version.md +0 -21
  245. package/docs/guides/util/which-path-to-executable-bin.md +0 -15
  246. package/docs/guides/websocket/compression.md +0 -31
  247. package/docs/guides/websocket/context.md +0 -77
  248. package/docs/guides/websocket/pubsub.md +0 -41
  249. package/docs/guides/websocket/simple.md +0 -33
  250. package/docs/guides/write-file/append.md +0 -52
  251. package/docs/guides/write-file/basic.md +0 -44
  252. package/docs/guides/write-file/blob.md +0 -28
  253. package/docs/guides/write-file/cat.md +0 -17
  254. package/docs/guides/write-file/file-cp.md +0 -16
  255. package/docs/guides/write-file/filesink.md +0 -52
  256. package/docs/guides/write-file/response.md +0 -17
  257. package/docs/guides/write-file/stdout.md +0 -21
  258. package/docs/guides/write-file/stream.md +0 -17
  259. package/docs/guides/write-file/unlink.md +0 -16
  260. package/docs/index.md +0 -77
  261. package/docs/install/audit.md +0 -57
  262. package/docs/install/cache.md +0 -59
  263. package/docs/install/catalogs.md +0 -298
  264. package/docs/install/index.md +0 -248
  265. package/docs/install/isolated.md +0 -197
  266. package/docs/install/lifecycle.md +0 -46
  267. package/docs/install/lockfile.md +0 -58
  268. package/docs/install/npmrc.md +0 -105
  269. package/docs/install/overrides.md +0 -73
  270. package/docs/install/patch.md +0 -59
  271. package/docs/install/registries.md +0 -30
  272. package/docs/install/security-scanner-api.md +0 -81
  273. package/docs/install/workspaces.md +0 -114
  274. package/docs/installation.md +0 -327
  275. package/docs/project/asan.md +0 -124
  276. package/docs/project/benchmarking.md +0 -203
  277. package/docs/project/bindgen.md +0 -225
  278. package/docs/project/building-windows.md +0 -162
  279. package/docs/project/contributing.md +0 -347
  280. package/docs/project/internals/build-process-for-ci.md +0 -75
  281. package/docs/project/licensing.md +0 -73
  282. package/docs/project/roadmap.md +0 -87
  283. package/docs/quickstart.md +0 -157
  284. package/docs/runtime/autoimport.md +0 -94
  285. package/docs/runtime/bun-apis.md +0 -207
  286. package/docs/runtime/bunfig.md +0 -772
  287. package/docs/runtime/debugger.md +0 -325
  288. package/docs/runtime/env.md +0 -253
  289. package/docs/runtime/hot.md +0 -145
  290. package/docs/runtime/index.md +0 -312
  291. package/docs/runtime/jsx.md +0 -385
  292. package/docs/runtime/loaders.md +0 -130
  293. package/docs/runtime/modules.md +0 -320
  294. package/docs/runtime/nodejs-apis.md +0 -463
  295. package/docs/runtime/plugins.md +0 -561
  296. package/docs/runtime/shell.md +0 -605
  297. package/docs/runtime/typescript.md +0 -139
  298. package/docs/runtime/web-apis.md +0 -128
  299. package/docs/test/configuration.md +0 -154
  300. package/docs/test/coverage.md +0 -142
  301. package/docs/test/discovery.md +0 -85
  302. package/docs/test/dom.md +0 -75
  303. package/docs/test/examples/concurrent-test-glob.md +0 -132
  304. package/docs/test/hot.md +0 -15
  305. package/docs/test/lifecycle.md +0 -81
  306. package/docs/test/mocks.md +0 -313
  307. package/docs/test/reporters.md +0 -117
  308. package/docs/test/runtime-behavior.md +0 -95
  309. package/docs/test/snapshots.md +0 -68
  310. package/docs/test/time.md +0 -126
  311. package/docs/test/writing.md +0 -825
  312. package/docs/typescript.md +0 -53
package/docs/test/dom.md DELETED
@@ -1,75 +0,0 @@
1
- Bun's test runner plays well with existing component and DOM testing libraries, including React Testing Library and [`happy-dom`](https://github.com/capricorn86/happy-dom).
2
-
3
- ## `happy-dom`
4
-
5
- For writing headless tests for your frontend code and components, we recommend [`happy-dom`](https://github.com/capricorn86/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.
6
-
7
- To get started install the `@happy-dom/global-registrator` package as a dev dependency.
8
-
9
- ```bash
10
- $ bun add -d @happy-dom/global-registrator
11
- ```
12
-
13
- 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:
14
-
15
- ```ts
16
- import { GlobalRegistrator } from "@happy-dom/global-registrator";
17
-
18
- GlobalRegistrator.register();
19
- ```
20
-
21
- To preload this file before `bun test`, open or create a `bunfig.toml` file and add the following lines.
22
-
23
- ```toml
24
- [test]
25
- preload = "./happydom.ts"
26
- ```
27
-
28
- This will execute `happydom.ts` when you run `bun test`. Now you can write tests that use browser APIs like `document` and `window`.
29
-
30
- ```ts#dom.test.ts
31
- import {test, expect} from 'bun:test';
32
-
33
- test('dom test', () => {
34
- document.body.innerHTML = `<button>My button</button>`;
35
- const button = document.querySelector('button');
36
- expect(button?.innerText).toEqual('My button');
37
- });
38
- ```
39
-
40
- 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](https://www.typescriptlang.org/docs/handbook/triple-slash-directives.html) to the top of any test file.
41
-
42
- ```ts-diff#dom.test.ts
43
- + /// <reference lib="dom" />
44
-
45
- import {test, expect} from 'bun:test';
46
-
47
- test('dom test', () => {
48
- document.body.innerHTML = `<button>My button</button>`;
49
- const button = document.querySelector('button');
50
- expect(button?.innerText).toEqual('My button');
51
- });
52
- ```
53
-
54
- Let's run this test with `bun test`:
55
-
56
- ```bash
57
- $ bun test
58
- bun test v1.3.2-canary.20251104T140728
59
-
60
- dom.test.ts:
61
- ✓ dom test [0.82ms]
62
-
63
- 1 pass
64
- 0 fail
65
- 1 expect() calls
66
- Ran 1 tests across 1 files. 1 total [125.00ms]
67
- ```
68
-
69
- <!-- ## React Testing Library
70
-
71
- Once you've set up `happy-dom` as described above, you can use it with React Testing Library. To get started, install the `@testing-library/react` package as a dev dependency.
72
-
73
- ```bash
74
- $ bun add -d @testing-library/react
75
- ``` -->
@@ -1,132 +0,0 @@
1
- # Concurrent Test Glob Example
2
-
3
- This example demonstrates how to use the `concurrentTestGlob` option to selectively run tests concurrently based on file naming patterns.
4
-
5
- ## Project Structure
6
-
7
- ```text
8
- my-project/
9
- ├── bunfig.toml
10
- ├── tests/
11
- │ ├── unit/
12
- │ │ ├── math.test.ts # Sequential
13
- │ │ └── utils.test.ts # Sequential
14
- │ └── integration/
15
- │ ├── concurrent-api.test.ts # Concurrent
16
- │ └── concurrent-database.test.ts # Concurrent
17
- ```
18
-
19
- ## Configuration
20
-
21
- ### bunfig.toml
22
-
23
- ```toml
24
- [test]
25
- # Run all test files with "concurrent-" prefix concurrently
26
- concurrentTestGlob = "**/concurrent-*.test.ts"
27
- ```
28
-
29
- ## Test Files
30
-
31
- ### Unit Test (Sequential)
32
-
33
- `tests/unit/math.test.ts`
34
-
35
- ```typescript
36
- import { test, expect } from "bun:test";
37
-
38
- // These tests run sequentially by default
39
- // Good for tests that share state or have specific ordering requirements
40
- let sharedState = 0;
41
-
42
- test("addition", () => {
43
- sharedState = 5 + 3;
44
- expect(sharedState).toBe(8);
45
- });
46
-
47
- test("uses previous state", () => {
48
- // This test depends on the previous test's state
49
- expect(sharedState).toBe(8);
50
- });
51
- ```
52
-
53
- ### Integration Test (Concurrent)
54
-
55
- `tests/integration/concurrent-api.test.ts`
56
-
57
- ```typescript
58
- import { test, expect } from "bun:test";
59
-
60
- // These tests automatically run concurrently due to filename matching the glob pattern.
61
- // Using test() is equivalent to test.concurrent() when the file matches concurrentTestGlob.
62
- // Each test is independent and can run in parallel.
63
-
64
- test("fetch user data", async () => {
65
- const response = await fetch("/api/user/1");
66
- expect(response.ok).toBe(true);
67
- });
68
-
69
- test("fetch posts", async () => {
70
- const response = await fetch("/api/posts");
71
- expect(response.ok).toBe(true);
72
- });
73
-
74
- test("fetch comments", async () => {
75
- const response = await fetch("/api/comments");
76
- expect(response.ok).toBe(true);
77
- });
78
- ```
79
-
80
- ## Running Tests
81
-
82
- ```bash
83
- # Run all tests - concurrent-*.test.ts files will run concurrently
84
- bun test
85
-
86
- # Override: Force ALL tests to run concurrently
87
- # Note: This overrides bunfig.toml and runs all tests concurrently, regardless of glob
88
- bun test --concurrent
89
-
90
- # Run only unit tests (sequential)
91
- bun test tests/unit
92
-
93
- # Run only integration tests (concurrent due to glob pattern)
94
- bun test tests/integration
95
- ```
96
-
97
- ## Benefits
98
-
99
- 1. **Gradual Migration**: Migrate to concurrent tests file by file by renaming them
100
- 2. **Clear Organization**: File naming convention indicates execution mode
101
- 3. **Performance**: Integration tests run faster in parallel
102
- 4. **Safety**: Unit tests remain sequential where needed
103
- 5. **Flexibility**: Easy to change execution mode by renaming files
104
-
105
- ## Migration Strategy
106
-
107
- To migrate existing tests to concurrent execution:
108
-
109
- 1. Start with independent integration tests
110
- 2. Rename files to match the glob pattern: `mv api.test.ts concurrent-api.test.ts`
111
- 3. Verify tests still pass
112
- 4. Monitor for race conditions or shared state issues
113
- 5. Continue migrating stable tests incrementally
114
-
115
- ## Tips
116
-
117
- - Use descriptive prefixes: `concurrent-`, `parallel-`, `async-`
118
- - Keep related sequential tests together
119
- - Document why certain tests must remain sequential
120
- - Use `test.concurrent()` for fine-grained control in sequential files
121
- (In files matched by `concurrentTestGlob`, plain `test()` already runs concurrently)
122
- - Consider separate globs for different test types:
123
-
124
- ```toml
125
- [test]
126
- # Multiple patterns for different test categories
127
- concurrentTestGlob = [
128
- "**/integration/*.test.ts",
129
- "**/e2e/*.test.ts",
130
- "**/concurrent-*.test.ts"
131
- ]
132
- ```
package/docs/test/hot.md DELETED
@@ -1,15 +0,0 @@
1
- To automatically re-run tests when files change, use the `--watch` flag:
2
-
3
- ```sh
4
- $ bun test --watch
5
- ```
6
-
7
- Bun will watch for changes to any files imported in a test file, and re-run tests when a change is detected.
8
-
9
- It's fast.
10
-
11
- {% raw %}
12
-
13
- <blockquote class="twitter-tweet"><p lang="en" dir="ltr">&quot;bun test --watch url&quot; in a large folder with multiple files that start with &quot;url&quot; <a href="https://t.co/aZV9BP4eFu">pic.twitter.com/aZV9BP4eFu</a></p>&mdash; Jarred Sumner (@jarredsumner) <a href="https://twitter.com/jarredsumner/status/1640890850535436288?ref_src=twsrc%5Etfw">March 29, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
14
-
15
- {% /raw %}
@@ -1,81 +0,0 @@
1
- The test runner supports the following lifecycle hooks. This is useful for loading test fixtures, mocking data, and configuring the test environment.
2
-
3
- | Hook | Description |
4
- | ------------ | --------------------------- |
5
- | `beforeAll` | Runs once before all tests. |
6
- | `beforeEach` | Runs before each test. |
7
- | `afterEach` | Runs after each test. |
8
- | `afterAll` | Runs once after all tests. |
9
-
10
- Perform per-test setup and teardown logic with `beforeEach` and `afterEach`.
11
-
12
- ```ts
13
- import { beforeEach, afterEach } from "bun:test";
14
-
15
- beforeEach(() => {
16
- console.log("running test.");
17
- });
18
-
19
- afterEach(() => {
20
- console.log("done with test.");
21
- });
22
-
23
- // tests...
24
- ```
25
-
26
- Perform per-scope setup and teardown logic with `beforeAll` and `afterAll`. The _scope_ is determined by where the hook is defined.
27
-
28
- To scope the hooks to a particular `describe` block:
29
-
30
- ```ts
31
- import { describe, beforeAll } from "bun:test";
32
-
33
- describe("test group", () => {
34
- beforeAll(() => {
35
- // setup
36
- });
37
-
38
- // tests...
39
- });
40
- ```
41
-
42
- To scope the hooks to a test file:
43
-
44
- ```ts
45
- import { describe, beforeAll } from "bun:test";
46
-
47
- beforeAll(() => {
48
- // setup
49
- });
50
-
51
- describe("test group", () => {
52
- // tests...
53
- });
54
- ```
55
-
56
- To scope the hooks to an entire multi-file test run, define the hooks in a separate file.
57
-
58
- ```ts#setup.ts
59
- import { beforeAll, afterAll } from "bun:test";
60
-
61
- beforeAll(() => {
62
- // global setup
63
- });
64
-
65
- afterAll(() => {
66
- // global teardown
67
- });
68
- ```
69
-
70
- Then use `--preload` to run the setup script before any test files.
71
-
72
- ```ts
73
- $ bun test --preload ./setup.ts
74
- ```
75
-
76
- To avoid typing `--preload` every time you run tests, it can be added to your `bunfig.toml`:
77
-
78
- ```toml
79
- [test]
80
- preload = ["./setup.ts"]
81
- ```
@@ -1,313 +0,0 @@
1
- Create mocks with the `mock` function.
2
-
3
- ```ts
4
- import { test, expect, mock } from "bun:test";
5
- const random = mock(() => Math.random());
6
-
7
- test("random", async () => {
8
- const val = random();
9
- expect(val).toBeGreaterThan(0);
10
- expect(random).toHaveBeenCalled();
11
- expect(random).toHaveBeenCalledTimes(1);
12
- });
13
- ```
14
-
15
- {% callout %}
16
- Alternatively, you can use the `jest.fn()` function, as in Jest. It behaves identically.
17
-
18
- ```ts
19
- import { test, expect, jest } from "bun:test";
20
- const random = jest.fn(() => Math.random());
21
-
22
- test("random", async () => {
23
- const val = random();
24
- expect(val).toBeGreaterThan(0);
25
- expect(random).toHaveBeenCalled();
26
- expect(random).toHaveBeenCalledTimes(1);
27
- });
28
- ```
29
-
30
- {% /callout %}
31
-
32
- The result of `mock()` is a new function that's been decorated with some additional properties.
33
-
34
- ```ts
35
- import { mock } from "bun:test";
36
- const random = mock((multiplier: number) => multiplier * Math.random());
37
-
38
- random(2);
39
- random(10);
40
-
41
- random.mock.calls;
42
- // [[ 2 ], [ 10 ]]
43
-
44
- random.mock.results;
45
- // [
46
- // { type: "return", value: 0.6533907460954099 },
47
- // { type: "return", value: 0.6452713933037312 }
48
- // ]
49
- ```
50
-
51
- The following properties and methods are implemented on mock functions.
52
-
53
- - [x] [mockFn.getMockName()](https://jestjs.io/docs/mock-function-api#mockfngetmockname)
54
- - [x] [mockFn.mock.calls](https://jestjs.io/docs/mock-function-api#mockfnmockcalls)
55
- - [x] [mockFn.mock.results](https://jestjs.io/docs/mock-function-api#mockfnmockresults)
56
- - [x] [mockFn.mock.instances](https://jestjs.io/docs/mock-function-api#mockfnmockinstances)
57
- - [x] [mockFn.mock.contexts](https://jestjs.io/docs/mock-function-api#mockfnmockcontexts)
58
- - [x] [mockFn.mock.lastCall](https://jestjs.io/docs/mock-function-api#mockfnmocklastcall)
59
- - [x] [mockFn.mockClear()](https://jestjs.io/docs/mock-function-api#mockfnmockclear) - Clears call history
60
- - [x] [mockFn.mockReset()](https://jestjs.io/docs/mock-function-api#mockfnmockreset) - Clears call history and removes implementation
61
- - [x] [mockFn.mockRestore()](https://jestjs.io/docs/mock-function-api#mockfnmockrestore) - Restores original implementation
62
- - [x] [mockFn.mockImplementation(fn)](https://jestjs.io/docs/mock-function-api#mockfnmockimplementationfn)
63
- - [x] [mockFn.mockImplementationOnce(fn)](https://jestjs.io/docs/mock-function-api#mockfnmockimplementationoncefn)
64
- - [x] [mockFn.mockName(name)](https://jestjs.io/docs/mock-function-api#mockfnmocknamename)
65
- - [x] [mockFn.mockReturnThis()](https://jestjs.io/docs/mock-function-api#mockfnmockreturnthis)
66
- - [x] [mockFn.mockReturnValue(value)](https://jestjs.io/docs/mock-function-api#mockfnmockreturnvaluevalue)
67
- - [x] [mockFn.mockReturnValueOnce(value)](https://jestjs.io/docs/mock-function-api#mockfnmockreturnvalueoncevalue)
68
- - [x] [mockFn.mockResolvedValue(value)](https://jestjs.io/docs/mock-function-api#mockfnmockresolvedvaluevalue)
69
- - [x] [mockFn.mockResolvedValueOnce(value)](https://jestjs.io/docs/mock-function-api#mockfnmockresolvedvalueoncevalue)
70
- - [x] [mockFn.mockRejectedValue(value)](https://jestjs.io/docs/mock-function-api#mockfnmockrejectedvaluevalue)
71
- - [x] [mockFn.mockRejectedValueOnce(value)](https://jestjs.io/docs/mock-function-api#mockfnmockrejectedvalueoncevalue)
72
- - [x] [mockFn.withImplementation(fn, callback)](https://jestjs.io/docs/mock-function-api#mockfnwithimplementationfn-callback)
73
-
74
- ## `.spyOn()`
75
-
76
- It's possible to track calls to a function without replacing it with a mock. Use `spyOn()` to create a spy; these spies can be passed to `.toHaveBeenCalled()` and `.toHaveBeenCalledTimes()`.
77
-
78
- ```ts
79
- import { test, expect, spyOn } from "bun:test";
80
-
81
- const ringo = {
82
- name: "Ringo",
83
- sayHi() {
84
- console.log(`Hello I'm ${this.name}`);
85
- },
86
- };
87
-
88
- const spy = spyOn(ringo, "sayHi");
89
-
90
- test("spyon", () => {
91
- expect(spy).toHaveBeenCalledTimes(0);
92
- ringo.sayHi();
93
- expect(spy).toHaveBeenCalledTimes(1);
94
- });
95
- ```
96
-
97
- ## Module mocks with `mock.module()`
98
-
99
- Module mocking lets you override the behavior of a module. Use `mock.module(path: string, callback: () => Object)` to mock a module.
100
-
101
- ```ts
102
- import { test, expect, mock } from "bun:test";
103
-
104
- mock.module("./module", () => {
105
- return {
106
- foo: "bar",
107
- };
108
- });
109
-
110
- test("mock.module", async () => {
111
- const esm = await import("./module");
112
- expect(esm.foo).toBe("bar");
113
-
114
- const cjs = require("./module");
115
- expect(cjs.foo).toBe("bar");
116
- });
117
- ```
118
-
119
- Like the rest of Bun, module mocks support both `import` and `require`.
120
-
121
- ### Overriding already imported modules
122
-
123
- If you need to override a module that's already been imported, there's nothing special you need to do. Just call `mock.module()` and the module will be overridden.
124
-
125
- ```ts
126
- import { test, expect, mock } from "bun:test";
127
-
128
- // The module we're going to mock is here:
129
- import { foo } from "./module";
130
-
131
- test("mock.module", async () => {
132
- const cjs = require("./module");
133
- expect(foo).toBe("bar");
134
- expect(cjs.foo).toBe("bar");
135
-
136
- // We update it here:
137
- mock.module("./module", () => {
138
- return {
139
- foo: "baz",
140
- };
141
- });
142
-
143
- // And the live bindings are updated.
144
- expect(foo).toBe("baz");
145
-
146
- // The module is also updated for CJS.
147
- expect(cjs.foo).toBe("baz");
148
- });
149
- ```
150
-
151
- ### Hoisting & preloading
152
-
153
- If you need to ensure a module is mocked before it's imported, you should use `--preload` to load your mocks before your tests run.
154
-
155
- ```ts
156
- // my-preload.ts
157
- import { mock } from "bun:test";
158
-
159
- mock.module("./module", () => {
160
- return {
161
- foo: "bar",
162
- };
163
- });
164
- ```
165
-
166
- ```sh
167
- bun test --preload ./my-preload
168
- ```
169
-
170
- To make your life easier, you can put `preload` in your `bunfig.toml`:
171
-
172
- ```toml
173
-
174
- [test]
175
- # Load these modules before running tests.
176
- preload = ["./my-preload"]
177
-
178
- ```
179
-
180
- #### What happens if I mock a module that's already been imported?
181
-
182
- If you mock a module that's already been imported, the module will be updated in the module cache. This means that any modules that import the module will get the mocked version, BUT the original module will still have been evaluated. That means that any side effects from the original module will still have happened.
183
-
184
- If you want to prevent the original module from being evaluated, you should use `--preload` to load your mocks before your tests run.
185
-
186
- ### `__mocks__` directory and auto-mocking
187
-
188
- Auto-mocking is not supported yet. If this is blocking you from switching to Bun, please file an issue.
189
-
190
- ### Implementation details
191
-
192
- Module mocks have different implementations for ESM and CommonJS modules. For ES Modules, we've added patches to JavaScriptCore that allow Bun to override export values at runtime and update live bindings recursively.
193
-
194
- As of Bun v1.0.19, Bun automatically resolves the `specifier` argument to `mock.module()` as though you did an `import`. If it successfully resolves, then the resolved specifier string is used as the key in the module cache. This means that you can use relative paths, absolute paths, and even module names. If the `specifier` doesn't resolve, then the original `specifier` is used as the key in the module cache.
195
-
196
- After resolution, the mocked module is stored in the ES Module registry **and** the CommonJS require cache. This means that you can use `import` and `require` interchangeably for mocked modules.
197
-
198
- The callback function is called lazily, only if the module is imported or required. This means that you can use `mock.module()` to mock modules that don't exist yet, and it means that you can use `mock.module()` to mock modules that are imported by other modules.
199
-
200
- ### Module Mock Implementation Details
201
-
202
- Understanding how `mock.module()` works helps you use it more effectively:
203
-
204
- 1. **Cache Interaction**: Module mocks interacts with both ESM and CommonJS module caches.
205
-
206
- 2. **Lazy Evaluation**: The mock factory callback is only evaluated when the module is actually imported or required.
207
-
208
- 3. **Path Resolution**: Bun automatically resolves the module specifier as though you were doing an import, supporting:
209
- - Relative paths (`'./module'`)
210
- - Absolute paths (`'/path/to/module'`)
211
- - Package names (`'lodash'`)
212
-
213
- 4. **Import Timing Effects**:
214
- - When mocking before first import: No side effects from the original module occur
215
- - When mocking after import: The original module's side effects have already happened
216
- - For this reason, using `--preload` is recommended for mocks that need to prevent side effects
217
-
218
- 5. **Live Bindings**: Mocked ESM modules maintain live bindings, so changing the mock will update all existing imports
219
-
220
- ## Global Mock Functions
221
-
222
- ### Clear all mocks with `mock.clearAllMocks()`
223
-
224
- Reset all mock function state (calls, results, etc.) without restoring their original implementation:
225
-
226
- ```ts
227
- import { expect, mock, test } from "bun:test";
228
-
229
- const random1 = mock(() => Math.random());
230
- const random2 = mock(() => Math.random());
231
-
232
- test("clearing all mocks", () => {
233
- random1();
234
- random2();
235
-
236
- expect(random1).toHaveBeenCalledTimes(1);
237
- expect(random2).toHaveBeenCalledTimes(1);
238
-
239
- mock.clearAllMocks();
240
-
241
- expect(random1).toHaveBeenCalledTimes(0);
242
- expect(random2).toHaveBeenCalledTimes(0);
243
-
244
- // Note: implementations are preserved
245
- expect(typeof random1()).toBe("number");
246
- expect(typeof random2()).toBe("number");
247
- });
248
- ```
249
-
250
- This resets the `.mock.calls`, `.mock.instances`, `.mock.contexts`, and `.mock.results` properties of all mocks, but unlike `mock.restore()`, it does not restore the original implementation.
251
-
252
- ### Restore all function mocks with `mock.restore()`
253
-
254
- Instead of manually restoring each mock individually with `mockFn.mockRestore()`, restore all mocks with one command by calling `mock.restore()`. Doing so does not reset the value of modules overridden with `mock.module()`.
255
-
256
- Using `mock.restore()` can reduce the amount of code in your tests by adding it to `afterEach` blocks in each test file or even in your [test preload code](https://bun.sh/docs/runtime/bunfig#test-preload).
257
-
258
- ```ts
259
- import { expect, mock, spyOn, test } from "bun:test";
260
-
261
- import * as fooModule from "./foo.ts";
262
- import * as barModule from "./bar.ts";
263
- import * as bazModule from "./baz.ts";
264
-
265
- test("foo, bar, baz", () => {
266
- const fooSpy = spyOn(fooModule, "foo");
267
- const barSpy = spyOn(barModule, "bar");
268
- const bazSpy = spyOn(bazModule, "baz");
269
-
270
- expect(fooSpy).toBe("foo");
271
- expect(barSpy).toBe("bar");
272
- expect(bazSpy).toBe("baz");
273
-
274
- fooSpy.mockImplementation(() => 42);
275
- barSpy.mockImplementation(() => 43);
276
- bazSpy.mockImplementation(() => 44);
277
-
278
- expect(fooSpy).toBe(42);
279
- expect(barSpy).toBe(43);
280
- expect(bazSpy).toBe(44);
281
-
282
- mock.restore();
283
-
284
- expect(fooSpy).toBe("foo");
285
- expect(barSpy).toBe("bar");
286
- expect(bazSpy).toBe("baz");
287
- });
288
- ```
289
-
290
- ## Vitest Compatibility
291
-
292
- For added compatibility with tests written for [Vitest](https://vitest.dev/), Bun provides the `vi` global object as an alias for parts of the Jest mocking API:
293
-
294
- ```ts
295
- import { test, expect } from "bun:test";
296
-
297
- // Using the 'vi' alias similar to Vitest
298
- test("vitest compatibility", () => {
299
- const mockFn = vi.fn(() => 42);
300
-
301
- mockFn();
302
- expect(mockFn).toHaveBeenCalled();
303
-
304
- // The following functions are available on the vi object:
305
- // vi.fn
306
- // vi.spyOn
307
- // vi.mock
308
- // vi.restoreAllMocks
309
- // vi.clearAllMocks
310
- });
311
- ```
312
-
313
- This makes it easier to port tests from Vitest to Bun without having to rewrite all your mocks.