@vitest-agent/mcp 1.0.1 → 1.2.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.
Files changed (229) hide show
  1. package/README.md +1 -2
  2. package/bin/vitest-agent-mcp.js +1 -17
  3. package/index.d.ts +324 -315
  4. package/index.js +2 -4
  5. package/middleware/idempotency.js +1 -1
  6. package/package.json +2 -2
  7. package/server.js +2 -4
  8. package/tools/acceptance-metrics.js +1 -1
  9. package/tools/cache-health.js +1 -1
  10. package/tools/commit-changes.js +1 -1
  11. package/tools/configure.js +1 -1
  12. package/tools/coverage.js +1 -1
  13. package/tools/errors.js +1 -1
  14. package/tools/failure-signature-get.js +1 -1
  15. package/tools/file-coverage.js +1 -1
  16. package/tools/history.js +1 -1
  17. package/tools/inventory.js +1 -1
  18. package/tools/overview.js +1 -1
  19. package/tools/run-tests.js +15 -3
  20. package/tools/settings-list.js +1 -1
  21. package/tools/status.js +1 -1
  22. package/tools/tdd-artifact.js +1 -1
  23. package/tools/tdd-task.js +1 -1
  24. package/tools/test.js +1 -1
  25. package/tools/trends.js +1 -1
  26. package/tools/turn-search.js +1 -1
  27. package/public/patterns/_meta.json +0 -67
  28. package/public/patterns/authoring-a-custom-vitest-agent-reporter.md +0 -82
  29. package/public/patterns/known-issues-and-caveats.md +0 -52
  30. package/public/patterns/operating-vitest-agent-as-an-agent.md +0 -53
  31. package/public/patterns/running-tests-via-mcp.md +0 -58
  32. package/public/patterns/silencing-leaking-output-in-tests.md +0 -91
  33. package/public/patterns/testing-effect-schema-definitions.md +0 -71
  34. package/public/patterns/testing-effect-services-with-mock-layers.md +0 -63
  35. package/public/vendor/vitest-docs/ATTRIBUTION.md +0 -5
  36. package/public/vendor/vitest-docs/api/advanced/artifacts.md +0 -189
  37. package/public/vendor/vitest-docs/api/advanced/metadata.md +0 -68
  38. package/public/vendor/vitest-docs/api/advanced/plugin.md +0 -168
  39. package/public/vendor/vitest-docs/api/advanced/reporters.md +0 -342
  40. package/public/vendor/vitest-docs/api/advanced/runner.md +0 -334
  41. package/public/vendor/vitest-docs/api/advanced/test-case.md +0 -302
  42. package/public/vendor/vitest-docs/api/advanced/test-collection.md +0 -89
  43. package/public/vendor/vitest-docs/api/advanced/test-module.md +0 -140
  44. package/public/vendor/vitest-docs/api/advanced/test-project.md +0 -321
  45. package/public/vendor/vitest-docs/api/advanced/test-specification.md +0 -96
  46. package/public/vendor/vitest-docs/api/advanced/test-suite.md +0 -230
  47. package/public/vendor/vitest-docs/api/advanced/vitest.md +0 -684
  48. package/public/vendor/vitest-docs/api/assert-type.md +0 -22
  49. package/public/vendor/vitest-docs/api/assert.md +0 -1960
  50. package/public/vendor/vitest-docs/api/browser/assertions.md +0 -1277
  51. package/public/vendor/vitest-docs/api/browser/commands.md +0 -154
  52. package/public/vendor/vitest-docs/api/browser/context.md +0 -338
  53. package/public/vendor/vitest-docs/api/browser/interactivity.md +0 -681
  54. package/public/vendor/vitest-docs/api/browser/locators.md +0 -1171
  55. package/public/vendor/vitest-docs/api/browser/react.md +0 -346
  56. package/public/vendor/vitest-docs/api/browser/svelte.md +0 -292
  57. package/public/vendor/vitest-docs/api/browser/vue.md +0 -222
  58. package/public/vendor/vitest-docs/api/describe.md +0 -374
  59. package/public/vendor/vitest-docs/api/expect-typeof.md +0 -571
  60. package/public/vendor/vitest-docs/api/expect.md +0 -2304
  61. package/public/vendor/vitest-docs/api/hooks.md +0 -463
  62. package/public/vendor/vitest-docs/api/mock.md +0 -701
  63. package/public/vendor/vitest-docs/api/test.md +0 -926
  64. package/public/vendor/vitest-docs/api/vi.md +0 -1372
  65. package/public/vendor/vitest-docs/config/alias.md +0 -13
  66. package/public/vendor/vitest-docs/config/allowonly.md +0 -32
  67. package/public/vendor/vitest-docs/config/api.md +0 -27
  68. package/public/vendor/vitest-docs/config/attachmentsdir.md +0 -6
  69. package/public/vendor/vitest-docs/config/bail.md +0 -9
  70. package/public/vendor/vitest-docs/config/benchmark.md +0 -65
  71. package/public/vendor/vitest-docs/config/browser/api.md +0 -23
  72. package/public/vendor/vitest-docs/config/browser/commands.md +0 -6
  73. package/public/vendor/vitest-docs/config/browser/connecttimeout.md +0 -10
  74. package/public/vendor/vitest-docs/config/browser/detailspanelposition.md +0 -38
  75. package/public/vendor/vitest-docs/config/browser/enabled.md +0 -40
  76. package/public/vendor/vitest-docs/config/browser/expect.md +0 -250
  77. package/public/vendor/vitest-docs/config/browser/headless.md +0 -7
  78. package/public/vendor/vitest-docs/config/browser/instances.md +0 -47
  79. package/public/vendor/vitest-docs/config/browser/isolate.md +0 -11
  80. package/public/vendor/vitest-docs/config/browser/locators.md +0 -24
  81. package/public/vendor/vitest-docs/config/browser/orchestratorscripts.md +0 -39
  82. package/public/vendor/vitest-docs/config/browser/playwright.md +0 -214
  83. package/public/vendor/vitest-docs/config/browser/preview.md +0 -32
  84. package/public/vendor/vitest-docs/config/browser/provider.md +0 -79
  85. package/public/vendor/vitest-docs/config/browser/screenshotdirectory.md +0 -6
  86. package/public/vendor/vitest-docs/config/browser/screenshotfailures.md +0 -6
  87. package/public/vendor/vitest-docs/config/browser/testerhtmlpath.md +0 -5
  88. package/public/vendor/vitest-docs/config/browser/trace.md +0 -43
  89. package/public/vendor/vitest-docs/config/browser/trackunhandlederrors.md +0 -10
  90. package/public/vendor/vitest-docs/config/browser/ui.md +0 -7
  91. package/public/vendor/vitest-docs/config/browser/viewport.md +0 -6
  92. package/public/vendor/vitest-docs/config/browser/webdriverio.md +0 -64
  93. package/public/vendor/vitest-docs/config/cache.md +0 -26
  94. package/public/vendor/vitest-docs/config/chaiconfig.md +0 -29
  95. package/public/vendor/vitest-docs/config/clearmocks.md +0 -22
  96. package/public/vendor/vitest-docs/config/coverage.md +0 -455
  97. package/public/vendor/vitest-docs/config/css.md +0 -47
  98. package/public/vendor/vitest-docs/config/dangerouslyignoreunhandlederrors.md +0 -23
  99. package/public/vendor/vitest-docs/config/deps.md +0 -127
  100. package/public/vendor/vitest-docs/config/detectasyncleaks.md +0 -39
  101. package/public/vendor/vitest-docs/config/diff.md +0 -96
  102. package/public/vendor/vitest-docs/config/dir.md +0 -7
  103. package/public/vendor/vitest-docs/config/disableconsoleintercept.md +0 -15
  104. package/public/vendor/vitest-docs/config/env.md +0 -5
  105. package/public/vendor/vitest-docs/config/environment.md +0 -96
  106. package/public/vendor/vitest-docs/config/environmentoptions.md +0 -30
  107. package/public/vendor/vitest-docs/config/exclude.md +0 -49
  108. package/public/vendor/vitest-docs/config/execargv.md +0 -10
  109. package/public/vendor/vitest-docs/config/expandsnapshotdiff.md +0 -7
  110. package/public/vendor/vitest-docs/config/expect.md +0 -38
  111. package/public/vendor/vitest-docs/config/experimental.md +0 -510
  112. package/public/vendor/vitest-docs/config/faketimers.md +0 -51
  113. package/public/vendor/vitest-docs/config/fileparallelism.md +0 -11
  114. package/public/vendor/vitest-docs/config/forcereruntriggers.md +0 -19
  115. package/public/vendor/vitest-docs/config/globals.md +0 -42
  116. package/public/vendor/vitest-docs/config/globalsetup.md +0 -72
  117. package/public/vendor/vitest-docs/config/hideskippedtests.md +0 -7
  118. package/public/vendor/vitest-docs/config/hooktimeout.md +0 -7
  119. package/public/vendor/vitest-docs/config/include-source.md +0 -115
  120. package/public/vendor/vitest-docs/config/include.md +0 -71
  121. package/public/vendor/vitest-docs/config/includetasklocation.md +0 -17
  122. package/public/vendor/vitest-docs/config/index.md +0 -85
  123. package/public/vendor/vitest-docs/config/isolate.md +0 -13
  124. package/public/vendor/vitest-docs/config/logheapusage.md +0 -7
  125. package/public/vendor/vitest-docs/config/maxconcurrency.md +0 -9
  126. package/public/vendor/vitest-docs/config/maxworkers.md +0 -49
  127. package/public/vendor/vitest-docs/config/mockreset.md +0 -22
  128. package/public/vendor/vitest-docs/config/mode.md +0 -7
  129. package/public/vendor/vitest-docs/config/name.md +0 -111
  130. package/public/vendor/vitest-docs/config/onconsolelog.md +0 -25
  131. package/public/vendor/vitest-docs/config/onstacktrace.md +0 -32
  132. package/public/vendor/vitest-docs/config/onunhandlederror.md +0 -35
  133. package/public/vendor/vitest-docs/config/open.md +0 -7
  134. package/public/vendor/vitest-docs/config/outputfile.md +0 -7
  135. package/public/vendor/vitest-docs/config/passwithnotests.md +0 -7
  136. package/public/vendor/vitest-docs/config/pool.md +0 -45
  137. package/public/vendor/vitest-docs/config/printconsoletrace.md +0 -6
  138. package/public/vendor/vitest-docs/config/projects.md +0 -6
  139. package/public/vendor/vitest-docs/config/provide.md +0 -45
  140. package/public/vendor/vitest-docs/config/reporters.md +0 -69
  141. package/public/vendor/vitest-docs/config/resolvesnapshotpath.md +0 -36
  142. package/public/vendor/vitest-docs/config/restoremocks.md +0 -22
  143. package/public/vendor/vitest-docs/config/retry.md +0 -140
  144. package/public/vendor/vitest-docs/config/root.md +0 -6
  145. package/public/vendor/vitest-docs/config/runner.md +0 -6
  146. package/public/vendor/vitest-docs/config/sequence.md +0 -158
  147. package/public/vendor/vitest-docs/config/server.md +0 -68
  148. package/public/vendor/vitest-docs/config/setupfiles.md +0 -40
  149. package/public/vendor/vitest-docs/config/silent.md +0 -9
  150. package/public/vendor/vitest-docs/config/slowtestthreshold.md +0 -7
  151. package/public/vendor/vitest-docs/config/snapshotenvironment.md +0 -27
  152. package/public/vendor/vitest-docs/config/snapshotformat.md +0 -28
  153. package/public/vendor/vitest-docs/config/snapshotserializers.md +0 -6
  154. package/public/vendor/vitest-docs/config/stricttags.md +0 -30
  155. package/public/vendor/vitest-docs/config/tags.md +0 -141
  156. package/public/vendor/vitest-docs/config/teardowntimeout.md +0 -7
  157. package/public/vendor/vitest-docs/config/testnamepattern.md +0 -21
  158. package/public/vendor/vitest-docs/config/testtimeout.md +0 -7
  159. package/public/vendor/vitest-docs/config/typecheck.md +0 -77
  160. package/public/vendor/vitest-docs/config/ui.md +0 -15
  161. package/public/vendor/vitest-docs/config/unstubenvs.md +0 -20
  162. package/public/vendor/vitest-docs/config/unstubglobals.md +0 -20
  163. package/public/vendor/vitest-docs/config/update.md +0 -16
  164. package/public/vendor/vitest-docs/config/vmmemorylimit.md +0 -30
  165. package/public/vendor/vitest-docs/config/watch.md +0 -11
  166. package/public/vendor/vitest-docs/config/watchtriggerpatterns.md +0 -29
  167. package/public/vendor/vitest-docs/guide/advanced/index.md +0 -147
  168. package/public/vendor/vitest-docs/guide/advanced/pool.md +0 -148
  169. package/public/vendor/vitest-docs/guide/advanced/reporters.md +0 -93
  170. package/public/vendor/vitest-docs/guide/advanced/tests.md +0 -125
  171. package/public/vendor/vitest-docs/guide/browser/aria-snapshots.md +0 -470
  172. package/public/vendor/vitest-docs/guide/browser/component-testing.md +0 -571
  173. package/public/vendor/vitest-docs/guide/browser/index.md +0 -630
  174. package/public/vendor/vitest-docs/guide/browser/multiple-setups.md +0 -121
  175. package/public/vendor/vitest-docs/guide/browser/trace-view.md +0 -126
  176. package/public/vendor/vitest-docs/guide/browser/visual-regression-testing.md +0 -734
  177. package/public/vendor/vitest-docs/guide/cli-generated.md +0 -972
  178. package/public/vendor/vitest-docs/guide/cli.md +0 -234
  179. package/public/vendor/vitest-docs/guide/common-errors.md +0 -163
  180. package/public/vendor/vitest-docs/guide/coverage.md +0 -515
  181. package/public/vendor/vitest-docs/guide/debugging.md +0 -127
  182. package/public/vendor/vitest-docs/guide/environment.md +0 -101
  183. package/public/vendor/vitest-docs/guide/extending-matchers.md +0 -160
  184. package/public/vendor/vitest-docs/guide/features.md +0 -310
  185. package/public/vendor/vitest-docs/guide/filtering.md +0 -175
  186. package/public/vendor/vitest-docs/guide/ide.md +0 -43
  187. package/public/vendor/vitest-docs/guide/improving-performance.md +0 -245
  188. package/public/vendor/vitest-docs/guide/in-source.md +0 -159
  189. package/public/vendor/vitest-docs/guide/index.md +0 -128
  190. package/public/vendor/vitest-docs/guide/learn/async.md +0 -147
  191. package/public/vendor/vitest-docs/guide/learn/debugging-tests.md +0 -210
  192. package/public/vendor/vitest-docs/guide/learn/matchers.md +0 -277
  193. package/public/vendor/vitest-docs/guide/learn/mock-functions.md +0 -277
  194. package/public/vendor/vitest-docs/guide/learn/setup-teardown.md +0 -240
  195. package/public/vendor/vitest-docs/guide/learn/snapshots.md +0 -166
  196. package/public/vendor/vitest-docs/guide/learn/testing-in-practice.md +0 -430
  197. package/public/vendor/vitest-docs/guide/learn/writing-tests-with-ai.md +0 -127
  198. package/public/vendor/vitest-docs/guide/learn/writing-tests.md +0 -231
  199. package/public/vendor/vitest-docs/guide/lifecycle.md +0 -379
  200. package/public/vendor/vitest-docs/guide/migration.md +0 -863
  201. package/public/vendor/vitest-docs/guide/mocking/classes.md +0 -158
  202. package/public/vendor/vitest-docs/guide/mocking/dates.md +0 -52
  203. package/public/vendor/vitest-docs/guide/mocking/file-system.md +0 -74
  204. package/public/vendor/vitest-docs/guide/mocking/functions.md +0 -61
  205. package/public/vendor/vitest-docs/guide/mocking/globals.md +0 -20
  206. package/public/vendor/vitest-docs/guide/mocking/modules.md +0 -414
  207. package/public/vendor/vitest-docs/guide/mocking/requests.md +0 -114
  208. package/public/vendor/vitest-docs/guide/mocking/timers.md +0 -48
  209. package/public/vendor/vitest-docs/guide/mocking.md +0 -239
  210. package/public/vendor/vitest-docs/guide/open-telemetry.md +0 -156
  211. package/public/vendor/vitest-docs/guide/parallelism.md +0 -82
  212. package/public/vendor/vitest-docs/guide/profiling-test-performance.md +0 -243
  213. package/public/vendor/vitest-docs/guide/projects.md +0 -291
  214. package/public/vendor/vitest-docs/guide/recipes.md +0 -59
  215. package/public/vendor/vitest-docs/guide/reporters.md +0 -723
  216. package/public/vendor/vitest-docs/guide/snapshot.md +0 -620
  217. package/public/vendor/vitest-docs/guide/test-annotations.md +0 -103
  218. package/public/vendor/vitest-docs/guide/test-context.md +0 -902
  219. package/public/vendor/vitest-docs/guide/test-tags.md +0 -314
  220. package/public/vendor/vitest-docs/guide/testing-types.md +0 -149
  221. package/public/vendor/vitest-docs/guide/ui.md +0 -160
  222. package/public/vendor/vitest-docs/guide/using-plugins.md +0 -5
  223. package/public/vendor/vitest-docs/manifest.json +0 -1691
  224. package/resources/index.js +0 -166
  225. package/resources/indexes.js +0 -77
  226. package/resources/manifest-schema.js +0 -46
  227. package/resources/paths.js +0 -20
  228. package/resources/patterns.js +0 -22
  229. package/resources/upstream-docs.js +0 -22
@@ -1,463 +0,0 @@
1
- # Hooks
2
-
3
- These functions allow you to hook into the life cycle of tests to avoid repeating setup and teardown code. They apply to the current context: the file if they are used at the top-level or the current suite if they are inside a `describe` block. These hooks are not called, when you are running Vitest as a [type checker](/guide/testing-types).
4
-
5
- Test hooks are called in a stack order ("after" hooks are reversed) by default, but you can configure it via [`sequence.hooks`](/config/sequence#sequence-hooks) option.
6
-
7
- ## beforeEach
8
-
9
- ```ts
10
- function beforeEach(
11
- body: (context: TestContext) => unknown,
12
- timeout?: number,
13
- ): void
14
- ```
15
-
16
- Register a callback to be called before each of the tests in the current suite runs.
17
- If the function returns a promise, Vitest waits until the promise resolve before running the test.
18
-
19
- Optionally, you can pass a timeout (in milliseconds) defining how long to wait before terminating. The default is 10 seconds, and can be configured globally with [`hookTimeout`](/config/hooktimeout).
20
-
21
- ```ts
22
- import { beforeEach } from 'vitest'
23
-
24
- beforeEach(async () => {
25
- // Clear mocks and add some testing data before each test run
26
- await stopMocking()
27
- await addUser({ name: 'John' })
28
- })
29
- ```
30
-
31
- Here, the `beforeEach` ensures that user is added for each test.
32
-
33
- `beforeEach` can also return an optional cleanup function (equivalent to [`afterEach`](#aftereach)):
34
-
35
- ```ts
36
- import { beforeEach } from 'vitest'
37
-
38
- beforeEach(async () => {
39
- // called once before each test run
40
- await prepareSomething()
41
-
42
- // clean up function, called once after each test run
43
- return async () => {
44
- await resetSomething()
45
- }
46
- })
47
- ```
48
-
49
- ## afterEach
50
-
51
- ```ts
52
- function afterEach(
53
- body: (context: TestContext) => unknown,
54
- timeout?: number,
55
- ): void
56
- ```
57
-
58
- Register a callback to be called after each one of the tests in the current suite completes.
59
- If the function returns a promise, Vitest waits until the promise resolve before continuing.
60
-
61
- Optionally, you can provide a timeout (in milliseconds) for specifying how long to wait before terminating. The default is 10 seconds, and can be configured globally with [`hookTimeout`](/config/hooktimeout).
62
-
63
- ```ts
64
- import { afterEach } from 'vitest'
65
-
66
- afterEach(async () => {
67
- await clearTestingData() // clear testing data after each test run
68
- })
69
- ```
70
-
71
- Here, the `afterEach` ensures that testing data is cleared after each test runs.
72
-
73
- ::: tip
74
- You can also use [`onTestFinished`](#ontestfinished) during the test execution to cleanup any state after the test has finished running.
75
- :::
76
-
77
- ## beforeAll
78
-
79
- ```ts
80
- function beforeAll(
81
- body: (context: ModuleContext) => unknown,
82
- timeout?: number,
83
- ): void
84
- ```
85
-
86
- Register a callback to be called once before starting to run all tests in the current suite.
87
- If the function returns a promise, Vitest waits until the promise resolve before running tests.
88
-
89
- Optionally, you can provide a timeout (in milliseconds) for specifying how long to wait before terminating. The default is 10 seconds, and can be configured globally with [`hookTimeout`](/config/hooktimeout).
90
-
91
- ```ts
92
- import { beforeAll } from 'vitest'
93
-
94
- beforeAll(async () => {
95
- await startMocking() // called once before all tests run
96
- })
97
- ```
98
-
99
- Here the `beforeAll` ensures that the mock data is set up before tests run.
100
-
101
- `beforeAll` can also return an optional cleanup function (equivalent to [`afterAll`](#afterall)):
102
-
103
- ```ts
104
- import { beforeAll } from 'vitest'
105
-
106
- beforeAll(async () => {
107
- // called once before all tests run
108
- await startMocking()
109
-
110
- // clean up function, called once after all tests run
111
- return async () => {
112
- await stopMocking()
113
- }
114
- })
115
- ```
116
-
117
- ## afterAll
118
-
119
- ```ts
120
- function afterAll(
121
- body: (context: ModuleContext) => unknown,
122
- timeout?: number,
123
- ): void
124
- ```
125
-
126
- Register a callback to be called once after all tests have run in the current suite.
127
- If the function returns a promise, Vitest waits until the promise resolve before continuing.
128
-
129
- Optionally, you can provide a timeout (in milliseconds) for specifying how long to wait before terminating. The default is 10 seconds, and can be configured globally with [`hookTimeout`](/config/hooktimeout).
130
-
131
- ```ts
132
- import { afterAll } from 'vitest'
133
-
134
- afterAll(async () => {
135
- await stopMocking() // this method is called after all tests run
136
- })
137
- ```
138
-
139
- Here the `afterAll` ensures that `stopMocking` method is called after all tests run.
140
-
141
- ## aroundEach
142
-
143
- ```ts
144
- function aroundEach(
145
- body: (
146
- runTest: () => Promise<void>,
147
- context: TestContext,
148
- ) => Promise<void>,
149
- timeout?: number,
150
- ): void
151
- ```
152
-
153
- Register a callback function that wraps around each test within the current suite. The callback receives a `runTest` function that **must** be called to run the test.
154
-
155
- The `runTest()` function runs `beforeEach` hooks, the test itself, fixtures accessed in the test, and `afterEach` hooks. Fixtures that are accessed in the `aroundEach` callback are initialized before `runTest()` is called and are torn down after the aroundEach teardown code completes, allowing you to safely use them in both setup and teardown phases.
156
-
157
- ::: warning
158
- You **must** call `runTest()` within your callback. If `runTest()` is not called, the test will fail with an error.
159
- :::
160
-
161
- Optionally, you can provide a timeout (in milliseconds) for specifying how long to wait before terminating. The timeout applies independently to the setup phase (before `runTest()`) and teardown phase (after `runTest()`). The default is 10 seconds, and can be configured globally with [`hookTimeout`](/config/hooktimeout).
162
-
163
- ```ts
164
- import { aroundEach, test } from 'vitest'
165
-
166
- aroundEach(async (runTest) => {
167
- await db.transaction(runTest)
168
- })
169
-
170
- test('insert user', async () => {
171
- await db.insert({ name: 'Alice' })
172
- // transaction is automatically rolled back after the test
173
- })
174
- ```
175
-
176
- ::: tip When to use `aroundEach`
177
- Use `aroundEach` when your test needs to run **inside a context** that wraps around it, such as:
178
- - Wrapping tests in [AsyncLocalStorage](https://nodejs.org/api/async_context.html#class-asynclocalstorage) context
179
- - Wrapping tests with tracing spans
180
- - Database transactions
181
-
182
- If you just need to run code before and after tests, prefer using [`beforeEach`](#beforeeach) with a cleanup return function:
183
- ```ts
184
- beforeEach(async () => {
185
- await database.connect()
186
- return async () => {
187
- await database.disconnect()
188
- }
189
- })
190
- ```
191
- :::
192
-
193
- ### Multiple Hooks
194
-
195
- When multiple `aroundEach` hooks are registered, they are nested inside each other. The first registered hook is the outermost wrapper:
196
-
197
- ```ts
198
- aroundEach(async (runTest) => {
199
- console.log('outer before')
200
- await runTest()
201
- console.log('outer after')
202
- })
203
-
204
- aroundEach(async (runTest) => {
205
- console.log('inner before')
206
- await runTest()
207
- console.log('inner after')
208
- })
209
-
210
- // Output order:
211
- // outer before
212
- // inner before
213
- // test
214
- // inner after
215
- // outer after
216
- ```
217
-
218
- ### Context and Fixtures
219
-
220
- The callback receives the test context as the second argument which means that you can use fixtures with `aroundEach`:
221
-
222
- ```ts
223
- import { aroundEach, test as base } from 'vitest'
224
-
225
- const test = base.extend<{ db: Database; user: User }>({
226
- db: async ({}, use) => {
227
- // db is created before `aroundEach` hook
228
- const db = await createTestDatabase()
229
- await use(db)
230
- await db.close()
231
- },
232
- user: async ({ db }, use) => {
233
- // `user` runs as part of the transaction
234
- // because it's accessed inside the `test`
235
- const user = await db.createUser()
236
- await use(user)
237
- },
238
- })
239
-
240
- // note that `aroundEach` is available on test
241
- // for a better TypeScript support of fixtures
242
- test.aroundEach(async (runTest, { db }) => {
243
- await db.transaction(runTest)
244
- })
245
-
246
- test('insert user', async ({ db, user }) => {
247
- await db.insert(user)
248
- })
249
- ```
250
-
251
- ## aroundAll
252
-
253
- ```ts
254
- function aroundAll(
255
- body: (
256
- runSuite: () => Promise<void>,
257
- context: ModuleContext,
258
- ) => Promise<void>,
259
- timeout?: number,
260
- ): void
261
- ```
262
-
263
- Register a callback function that wraps around all tests within the current suite. The callback receives a `runSuite` function that **must** be called to run the suite's tests.
264
-
265
- The `runSuite()` function runs all tests in the suite, including `beforeAll`/`afterAll`/`beforeEach`/`afterEach` hooks, `aroundEach` hooks, and fixtures.
266
-
267
- ::: warning
268
- You **must** call `runSuite()` within your callback. If `runSuite()` is not called, the hook will fail with an error and all tests in the suite will be skipped.
269
- :::
270
-
271
- Optionally, you can provide a timeout (in milliseconds) for specifying how long to wait before terminating. The timeout applies independently to the setup phase (before `runSuite()`) and teardown phase (after `runSuite()`). The default is 10 seconds, and can be configured globally with [`hookTimeout`](/config/hooktimeout).
272
-
273
- ```ts
274
- import { aroundAll, test } from 'vitest'
275
-
276
- aroundAll(async (runSuite) => {
277
- await tracer.trace('test-suite', runSuite)
278
- })
279
-
280
- test('test 1', () => {
281
- // Runs within the tracing span
282
- })
283
-
284
- test('test 2', () => {
285
- // Also runs within the same tracing span
286
- })
287
- ```
288
-
289
- ::: tip When to use `aroundAll`
290
- Use `aroundAll` when your suite needs to run **inside a context** that wraps around all tests, such as:
291
- - Wrapping an entire suite in [AsyncLocalStorage](https://nodejs.org/api/async_context.html#class-asynclocalstorage) context
292
- - Wrapping a suite with tracing spans
293
- - Database transactions
294
-
295
- If you just need to run code once before and after all tests, prefer using [`beforeAll`](#beforeall) with a cleanup return function:
296
- ```ts
297
- beforeAll(async () => {
298
- await server.start()
299
- return async () => {
300
- await server.stop()
301
- }
302
- })
303
- ```
304
- :::
305
-
306
- ### Multiple Hooks
307
-
308
- When multiple `aroundAll` hooks are registered, they are nested inside each other. The first registered hook is the outermost wrapper:
309
-
310
- ```ts
311
- aroundAll(async (runSuite) => {
312
- console.log('outer before')
313
- await runSuite()
314
- console.log('outer after')
315
- })
316
-
317
- aroundAll(async (runSuite) => {
318
- console.log('inner before')
319
- await runSuite()
320
- console.log('inner after')
321
- })
322
-
323
- // Output order: outer before → inner before → tests → inner after → outer after
324
- ```
325
-
326
- Each suite has its own independent `aroundAll` hooks. Parent suite's `aroundAll` wraps around child suite's execution:
327
-
328
- ```ts
329
- import { AsyncLocalStorage } from 'node:async_hooks'
330
- import { aroundAll, describe, test } from 'vitest'
331
-
332
- const context = new AsyncLocalStorage<{ suiteId: string }>()
333
-
334
- aroundAll(async (runSuite) => {
335
- await context.run({ suiteId: 'root' }, runSuite)
336
- })
337
-
338
- test('root test', () => {
339
- // context.getStore() returns { suiteId: 'root' }
340
- })
341
-
342
- describe('nested', () => {
343
- aroundAll(async (runSuite) => {
344
- // Parent's context is available here
345
- await context.run({ suiteId: 'nested' }, runSuite)
346
- })
347
-
348
- test('nested test', () => {
349
- // context.getStore() returns { suiteId: 'nested' }
350
- })
351
- })
352
- ```
353
-
354
- ## Test Hooks
355
-
356
- Vitest provides a few hooks that you can call _during_ the test execution to cleanup the state when the test has finished running.
357
-
358
- ::: warning
359
- These hooks will throw an error if they are called outside of the test body.
360
- :::
361
-
362
- ### onTestFinished {#ontestfinished}
363
-
364
- This hook is always called after the test has finished running. It is called after `afterEach` hooks since they can influence the test result. It receives an `TestContext` object like `beforeEach` and `afterEach`.
365
-
366
- ```ts {1,5}
367
- import { onTestFinished, test } from 'vitest'
368
-
369
- test('performs a query', () => {
370
- const db = connectDb()
371
- onTestFinished(() => db.close())
372
- db.query('SELECT * FROM users')
373
- })
374
- ```
375
-
376
- ::: warning
377
- If you are running tests concurrently, you should always use `onTestFinished` hook from the test context since Vitest doesn't track concurrent tests in global hooks:
378
-
379
- ```ts {3,5}
380
- import { test } from 'vitest'
381
-
382
- test.concurrent('performs a query', ({ onTestFinished }) => {
383
- const db = connectDb()
384
- onTestFinished(() => db.close())
385
- db.query('SELECT * FROM users')
386
- })
387
- ```
388
- :::
389
-
390
- This hook is particularly useful when creating reusable logic:
391
-
392
- ```ts
393
- // this can be in a separate file
394
- function getTestDb() {
395
- const db = connectMockedDb()
396
- onTestFinished(() => db.close())
397
- return db
398
- }
399
-
400
- test('performs a user query', async () => {
401
- const db = getTestDb()
402
- expect(
403
- await db.query('SELECT * from users').perform()
404
- ).toEqual([])
405
- })
406
-
407
- test('performs an organization query', async () => {
408
- const db = getTestDb()
409
- expect(
410
- await db.query('SELECT * from organizations').perform()
411
- ).toEqual([])
412
- })
413
- ```
414
-
415
- It is also a good practice to cleanup your spies after each test, so they don't leak into other tests. You can do so by enabling [`restoreMocks`](/config/restoremocks) config globally, or restoring the spy inside `onTestFinished` (if you try to restore the mock at the end of the test, it won't be restored if one of the assertions fails - using `onTestFinished` ensures the code always runs):
416
-
417
- ```ts
418
- import { onTestFinished, test } from 'vitest'
419
-
420
- test('performs a query', () => {
421
- const spy = vi.spyOn(db, 'query')
422
- onTestFinished(() => spy.mockClear())
423
-
424
- db.query('SELECT * FROM users')
425
- expect(spy).toHaveBeenCalled()
426
- })
427
- ```
428
-
429
- ::: tip
430
- This hook is always called in reverse order and is not affected by [`sequence.hooks`](/config/sequence#sequence-hooks) option.
431
- :::
432
-
433
- ### onTestFailed
434
-
435
- This hook is called only after the test has failed. It is called after `afterEach` hooks since they can influence the test result. It receives a `TestContext` object like `beforeEach` and `afterEach`. This hook is useful for debugging.
436
-
437
- ```ts {1,5-7}
438
- import { onTestFailed, test } from 'vitest'
439
-
440
- test('performs a query', () => {
441
- const db = connectDb()
442
- onTestFailed(({ task }) => {
443
- console.log(task.result.errors)
444
- })
445
- db.query('SELECT * FROM users')
446
- })
447
- ```
448
-
449
- ::: warning
450
- If you are running tests concurrently, you should always use `onTestFailed` hook from the test context since Vitest doesn't track concurrent tests in global hooks:
451
-
452
- ```ts {3,5-7}
453
- import { test } from 'vitest'
454
-
455
- test.concurrent('performs a query', ({ onTestFailed }) => {
456
- const db = connectDb()
457
- onTestFailed(({ task }) => {
458
- console.log(task.result.errors)
459
- })
460
- db.query('SELECT * FROM users')
461
- })
462
- ```
463
- :::