Global sequence.concurrent: true with top-level test(..., { concurrent: false }) + depreacte sequential test API and options - by @hi-ogawa, Codex and @sheremet-va in #10196(2847d)
web-worker: Support MessagePort objects referenced inside postMessage data - by @whitphx and Claude Opus 4.6 (1M context) in #9927 and #10124(7ad7d)
Soft assertions continue after .resolves/.rejects promise errors - by @mixelburg, Maks Pikov, Claude Opus 4.6 (1M context) and @hi-ogawa in #9843(6d74b)
Support TRACEPARENT and TRACESTATE environment variables for OpenTelemetry context propagation - by @Copilot, hi-ogawa and @hi-ogawa in #9295(876cb)
🐞 Bug Fixes
Improve asymmetric matcher diff readability by unwrapping container matchers - by @Copilot, sheremet-va, hi-ogawa and @hi-ogawa in #9330(b2ec7)
spy: Copy static properties if spy is initialised with vi.fn(), fix types for vi.spyOn(obj, class) - by @sheremet-va in #8956(75e7f)
webdriverio: When no argument is passed to the .click interaction command, the webdriver command should also have no argument - by @julienw in #8937(069e6)
This PR contains the following updates:
| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [vitest](https://vitest.dev) ([source](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`^3.2.4` → `^4.0.0`](https://renovatebot.com/diffs/npm/vitest/3.2.7/4.1.10) |  |  |
---
### Release Notes
<details>
<summary>vitest-dev/vitest (vitest)</summary>
### [`v4.1.10`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.10)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.1.9...v4.1.10)
##### 🐞 Bug Fixes
- **browser**: Check fs access in builtin commands \[backport to v4] - by [@​hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (claude-opus-4-8)** in [#​10680](https://github.com/vitest-dev/vitest/issues/10680) [<samp>(5c18d)</samp>](https://github.com/vitest-dev/vitest/commit/5c18dd267)
- **vm**: Fix external module resolve error with deps optimizer query for encoded URI \[backport to v4] - by [@​SveLil](https://github.com/SveLil) and [@​hi-ogawa](https://github.com/hi-ogawa) in [#​10661](https://github.com/vitest-dev/vitest/issues/10661) [<samp>(bae52)</samp>](https://github.com/vitest-dev/vitest/commit/bae52b511)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.9...v4.1.10)
### [`v4.1.9`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.9)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.1.8...v4.1.9)
##### 🐞 Bug Fixes
- Fix `importOriginal` with optimizer and query import \[backport to v4] - by **Hiroshi Ogawa**, **David Harris**, **Codex**and **Vladimir** in [#​10546](https://github.com/vitest-dev/vitest/issues/10546) [<samp>(a5180)</samp>](https://github.com/vitest-dev/vitest/commit/a5180190c)
- **browser**:
- Wait for orchestrator readiness before resolving browser sessions \[backport to v4] - by **Vladimir** and **Séamus O'Connor** in [#​10555](https://github.com/vitest-dev/vitest/issues/10555) [<samp>(7fb29)</samp>](https://github.com/vitest-dev/vitest/commit/7fb29651a)
- Wait for iframe tester readiness before preparing \[backport to v4] - by **Vladimir** and **Séamus O'Connor** in [#​10497](https://github.com/vitest-dev/vitest/issues/10497) and [#​10556](https://github.com/vitest-dev/vitest/issues/10556) [<samp>(fbc62)</samp>](https://github.com/vitest-dev/vitest/commit/fbc626c40)
- **mocker**:
- Hoist vi.mock() for vite-plus/test imports \[backport to v4] - by **Hiroshi Ogawa**, **LongYinan**, **Claude Opus 4.8** and **Vladimir** in [#​10548](https://github.com/vitest-dev/vitest/issues/10548) [<samp>(2c955)</samp>](https://github.com/vitest-dev/vitest/commit/2c9559c02)
- **pool**:
- Prevent test run hang on worker crash \[backport to v4] - by **Ari Perkkiö** and **Jattioui Ismail** in [#​10543](https://github.com/vitest-dev/vitest/issues/10543) and [#​10564](https://github.com/vitest-dev/vitest/issues/10564) [<samp>(934b0)</samp>](https://github.com/vitest-dev/vitest/commit/934b0f587)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.8...v4.1.9)
### [`v4.1.8`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.8)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.1.7...v4.1.8)
##### 🐞 Bug Fixes
- **browser**:
- Disable client `cdp` API when `allowWrite/allowExec: false` \[backport to v4] - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Codex** in [#​10450](https://github.com/vitest-dev/vitest/issues/10450) [<samp>(e4067)</samp>](https://github.com/vitest-dev/vitest/commit/e4067b3b1)
- Remove orphaned Playwright route when same module is mocked via multiple ids \[backport to v4] - by [@​toxik](https://github.com/toxik) and [@​Zelys-DFKH](https://github.com/Zelys-DFKH) in [#​10474](https://github.com/vitest-dev/vitest/issues/10474) [<samp>(675b4)</samp>](https://github.com/vitest-dev/vitest/commit/675b4343f)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.7...v4.1.8)
### [`v4.1.7`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.7)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.1.6...v4.1.7)
##### 🐞 Bug Fixes
- **runner**: Limit concurrency per task branch in addition to per leaf callbacks (backport) - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​10384](https://github.com/vitest-dev/vitest/issues/10384) [<samp>(4f0f2)</samp>](https://github.com/vitest-dev/vitest/commit/4f0f2a1ee)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.6...v4.1.7)
### [`v4.1.6`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.6)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.1.5...v4.1.6)
##### 🐞 Bug Fixes
- **browser**: Provide project reference in `ToMatchScreenshotResolvePath` - by [@​macarie](https://github.com/macarie) and [@​sheremet-va](https://github.com/sheremet-va) in [#​10138](https://github.com/vitest-dev/vitest/issues/10138) [<samp>(31882)</samp>](https://github.com/vitest-dev/vitest/commit/31882607c)
- Global `sequence.concurrent: true` with top-level `test(..., { concurrent: false })` + depreacte `sequential` test API and options - by [@​hi-ogawa](https://github.com/hi-ogawa), **Codex** and [@​sheremet-va](https://github.com/sheremet-va) in [#​10196](https://github.com/vitest-dev/vitest/issues/10196) [<samp>(2847d)</samp>](https://github.com/vitest-dev/vitest/commit/2847dfa2a)
- **browser**: Simplify orchestrator otel carrier - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​10285](https://github.com/vitest-dev/vitest/issues/10285) [<samp>(18af9)</samp>](https://github.com/vitest-dev/vitest/commit/18af98cee)
##### 🏎 Performance
- Stringify diff objects only once - by [@​sheremet-va](https://github.com/sheremet-va) in [#​10276](https://github.com/vitest-dev/vitest/issues/10276) [<samp>(9f7b1)</samp>](https://github.com/vitest-dev/vitest/commit/9f7b1528c)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.5...v4.1.6)
### [`v4.1.5`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.5)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.1.4...v4.1.5)
##### 🚀 Experimental Features
- **coverage**: Istanbul to support `instrumenter` option - by [@​BartWaardenburg](https://github.com/BartWaardenburg) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​10119](https://github.com/vitest-dev/vitest/issues/10119) [<samp>(0e0ff)</samp>](https://github.com/vitest-dev/vitest/commit/0e0ff41c7)
##### 🐞 Bug Fixes
- \--project negation excludes browser instances - by [@​felamaslen](https://github.com/felamaslen) in [#​10131](https://github.com/vitest-dev/vitest/issues/10131) [<samp>(9423d)</samp>](https://github.com/vitest-dev/vitest/commit/9423dc084)
- Project color label on html reporter - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​10142](https://github.com/vitest-dev/vitest/issues/10142) [<samp>(596f7)</samp>](https://github.com/vitest-dev/vitest/commit/596f73986)
- Fix `vi.defineHelper` called as object method - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​10163](https://github.com/vitest-dev/vitest/issues/10163) [<samp>(122c2)</samp>](https://github.com/vitest-dev/vitest/commit/122c25b5b)
- Alias `agent` reporter to `minimal` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​10157](https://github.com/vitest-dev/vitest/issues/10157) [<samp>(663b9)</samp>](https://github.com/vitest-dev/vitest/commit/663b99fe3)
- Respect diff config options in soft assertions - by [@​Copilot](https://github.com/Copilot), **sheremet-va** and [@​sheremet-va](https://github.com/sheremet-va) in [#​8696](https://github.com/vitest-dev/vitest/issues/8696) [<samp>(9787d)</samp>](https://github.com/vitest-dev/vitest/commit/9787dedad)
- Respect diff config options in soft assertions " - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8696](https://github.com/vitest-dev/vitest/issues/8696) [<samp>(7dc6d)</samp>](https://github.com/vitest-dev/vitest/commit/7dc6d54fd)
- **ast-collect**: Recognize \_*vi\_import* prefix in static test discovery - by [@​Yejneshwar](https://github.com/Yejneshwar) in [#​10129](https://github.com/vitest-dev/vitest/issues/10129) [<samp>(32546)</samp>](https://github.com/vitest-dev/vitest/commit/325463ab2)
- **coverage**: Descriptive error message when reports directory is removed during test run - by [@​DaveT1991](https://github.com/DaveT1991) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​10117](https://github.com/vitest-dev/vitest/issues/10117) [<samp>(14133)</samp>](https://github.com/vitest-dev/vitest/commit/1413382e1)
- **snapshot**: Increase default snapshot max output length - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Codex** in [#​10150](https://github.com/vitest-dev/vitest/issues/10150) [<samp>(21e66)</samp>](https://github.com/vitest-dev/vitest/commit/21e66ff63)
- **ui**: Fix jsx/tsx syntax highlight - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​10152](https://github.com/vitest-dev/vitest/issues/10152) [<samp>(f1b1f)</samp>](https://github.com/vitest-dev/vitest/commit/f1b1f6c7b)
- **web-worker**: Support MessagePort objects referenced inside postMessage data - by [@​whitphx](https://github.com/whitphx) and **Claude Opus 4.6 (1M context)** in [#​9927](https://github.com/vitest-dev/vitest/issues/9927) and [#​10124](https://github.com/vitest-dev/vitest/issues/10124) [<samp>(7ad7d)</samp>](https://github.com/vitest-dev/vitest/commit/7ad7d39af)
- **api**: Make test-specification options writable - by [@​sheremet-va](https://github.com/sheremet-va) in [#​10154](https://github.com/vitest-dev/vitest/issues/10154) [<samp>(6abd5)</samp>](https://github.com/vitest-dev/vitest/commit/6abd557b7)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.4...v4.1.5)
### [`v4.1.4`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.4)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.1.3...v4.1.4)
##### 🚀 Experimental Features
- **coverage**:
- Default to text reporter `skipFull` if agent detected - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​10018](https://github.com/vitest-dev/vitest/issues/10018) [<samp>(53757)</samp>](https://github.com/vitest-dev/vitest/commit/53757804c)
- **experimental**:
- Expose `assertion` as a public field - by [@​sheremet-va](https://github.com/sheremet-va) in [#​10095](https://github.com/vitest-dev/vitest/issues/10095) [<samp>(a120e)</samp>](https://github.com/vitest-dev/vitest/commit/a120e3ab8)
- Support aria snapshot - by [@​hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 4.6 (1M context)**, [@​AriPerkkio](https://github.com/AriPerkkio), **Codex** and [@​sheremet-va](https://github.com/sheremet-va) in [#​9668](https://github.com/vitest-dev/vitest/issues/9668) [<samp>(d4fbb)</samp>](https://github.com/vitest-dev/vitest/commit/d4fbb5cc9)
- **reporter**:
- Add filterMeta option to json reporter - by [@​nami8824](https://github.com/nami8824) and [@​sheremet-va](https://github.com/sheremet-va) in [#​10078](https://github.com/vitest-dev/vitest/issues/10078) [<samp>(b77de)</samp>](https://github.com/vitest-dev/vitest/commit/b77de968e)
##### 🐞 Bug Fixes
- Use "black" foreground for labeled terminal message to ensure contrast - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​10076](https://github.com/vitest-dev/vitest/issues/10076) [<samp>(203f0)</samp>](https://github.com/vitest-dev/vitest/commit/203f07af7)
- Make `expect(..., message)` consistent as error message prefix - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Codex** in [#​10068](https://github.com/vitest-dev/vitest/issues/10068) [<samp>(a1b5f)</samp>](https://github.com/vitest-dev/vitest/commit/a1b5f0f4f)
- Do not hoist imports whose names match class properties . - by [@​SunsetFi](https://github.com/SunsetFi) in [#​10093](https://github.com/vitest-dev/vitest/issues/10093) and [#​10094](https://github.com/vitest-dev/vitest/issues/10094) [<samp>(0fc4b)</samp>](https://github.com/vitest-dev/vitest/commit/0fc4b47e0)
- **browser**: Spread user server options into browser Vite server in project - by [@​GoldStrikeArch](https://github.com/GoldStrikeArch) in [#​10049](https://github.com/vitest-dev/vitest/issues/10049) [<samp>(65c9d)</samp>](https://github.com/vitest-dev/vitest/commit/65c9d55eb)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.3...v4.1.4)
### [`v4.1.3`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.3)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.1.2...v4.1.3)
##### 🚀 Experimental Features
- Add `experimental.preParse` flag - by [@​sheremet-va](https://github.com/sheremet-va) in [#​10070](https://github.com/vitest-dev/vitest/issues/10070) [<samp>(78273)</samp>](https://github.com/vitest-dev/vitest/commit/7827363bd)
- Support `browser.locators.exact` option - by [@​sheremet-va](https://github.com/sheremet-va) in [#​10013](https://github.com/vitest-dev/vitest/issues/10013) [<samp>(48799)</samp>](https://github.com/vitest-dev/vitest/commit/487990a19)
- Add `TestAttachment.bodyEncoding` - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9969](https://github.com/vitest-dev/vitest/issues/9969) [<samp>(89ca0)</samp>](https://github.com/vitest-dev/vitest/commit/89ca0e254)
- Support custom snapshot matcher - by [@​hi-ogawa](https://github.com/hi-ogawa), **Claude Sonnet 4.6** and **Codex** in [#​9973](https://github.com/vitest-dev/vitest/issues/9973) [<samp>(59b0e)</samp>](https://github.com/vitest-dev/vitest/commit/59b0e6411)
##### 🐞 Bug Fixes
- Advance fake timers with `expect.poll` interval - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#​10022](https://github.com/vitest-dev/vitest/issues/10022) [<samp>(3f5bf)</samp>](https://github.com/vitest-dev/vitest/commit/3f5bfa365)
- Add `@vitest/coverage-v8` and `@vitest/coverage-istanbul` as optional dependency - by [@​alan-agius4](https://github.com/alan-agius4) in [#​10025](https://github.com/vitest-dev/vitest/issues/10025) [<samp>(146d4)</samp>](https://github.com/vitest-dev/vitest/commit/146d4f0a0)
- Fix `defineHelper` for webkit async stack trace + update playwright 1.59.0 - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​10036](https://github.com/vitest-dev/vitest/issues/10036) [<samp>(5a5fa)</samp>](https://github.com/vitest-dev/vitest/commit/5a5fa49fe)
- Fix suite hook throwing errors for unused auto test-scoped fixture - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#​10035](https://github.com/vitest-dev/vitest/issues/10035) [<samp>(39865)</samp>](https://github.com/vitest-dev/vitest/commit/398657e8d)
- **expect**:
- Remove `JestExtendError.context` from verbose error reporting - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9983](https://github.com/vitest-dev/vitest/issues/9983) [<samp>(66751)</samp>](https://github.com/vitest-dev/vitest/commit/66751c9e8)
- Don't leak "runner" types - by [@​sheremet-va](https://github.com/sheremet-va) in [#​10004](https://github.com/vitest-dev/vitest/issues/10004) [<samp>(ec204)</samp>](https://github.com/vitest-dev/vitest/commit/ec2045543)
- **snapshot**:
- Fix flagging obsolete snapshots for snapshot properties mismatch - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#​9986](https://github.com/vitest-dev/vitest/issues/9986) [<samp>(6b869)</samp>](https://github.com/vitest-dev/vitest/commit/6b869156b)
- Export custom snapshot matcher helper from `vitest` - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Codex** in [#​10042](https://github.com/vitest-dev/vitest/issues/10042) [<samp>(691d3)</samp>](https://github.com/vitest-dev/vitest/commit/691d341fd)
- **ui**:
- Don't leak vite types - by [@​sheremet-va](https://github.com/sheremet-va) in [#​10005](https://github.com/vitest-dev/vitest/issues/10005) [<samp>(fdff1)</samp>](https://github.com/vitest-dev/vitest/commit/fdff1bf9a)
- **vm**:
- Fix external module resolve error with deps optimizer query - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#​10024](https://github.com/vitest-dev/vitest/issues/10024) [<samp>(9dbf4)</samp>](https://github.com/vitest-dev/vitest/commit/9dbf47786)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.2...v4.1.3)
### [`v4.1.2`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.2)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.1.1...v4.1.2)
This release bumps Vitest's `flatted` version and removes version pinning to resolve `flatted`'s CVE related issues ([#​9975](https://github.com/vitest-dev/vitest/issues/9975)).
##### 🐞 Bug Fixes
- Don't resolve `setupFiles` from parent directory - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9960](https://github.com/vitest-dev/vitest/issues/9960) [<samp>(7aa93)</samp>](https://github.com/vitest-dev/vitest/commit/7aa937776)
- Ensure sequential mock/unmock resolution - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9830](https://github.com/vitest-dev/vitest/issues/9830) [<samp>(7c065)</samp>](https://github.com/vitest-dev/vitest/commit/7c06598db)
- **browser**: Take failure screenshot if `toMatchScreenshot` can't capture a stable screenshot - by [@​macarie](https://github.com/macarie) in [#​9847](https://github.com/vitest-dev/vitest/issues/9847) [<samp>(faace)</samp>](https://github.com/vitest-dev/vitest/commit/faace1fbe)
- **coverage**: Correct `coverageConfigDefaults` values and types - by [@​Arthie](https://github.com/Arthie) in [#​9940](https://github.com/vitest-dev/vitest/issues/9940) [<samp>(b3c99)</samp>](https://github.com/vitest-dev/vitest/commit/b3c992cb2)
- **pretty-format**: Fix output limit over counting - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9965](https://github.com/vitest-dev/vitest/issues/9965) [<samp>(d3b7a)</samp>](https://github.com/vitest-dev/vitest/commit/d3b7a40fa)
- Disable colors if agent is detected - by [@​sheremet-va](https://github.com/sheremet-va) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9851](https://github.com/vitest-dev/vitest/issues/9851) [<samp>(6f97b)</samp>](https://github.com/vitest-dev/vitest/commit/6f97b55dd)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.1...v4.1.2)
### [`v4.1.1`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.1)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.1.0...v4.1.1)
##### 🚀 Features
- **experimental**:
- Expose `matchesTags` to test if the current filter matches tags - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9913](https://github.com/vitest-dev/vitest/issues/9913) [<samp>(eec53)</samp>](https://github.com/vitest-dev/vitest/commit/eec53d9f5)
- Introduce `experimental.vcsProvider` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9928](https://github.com/vitest-dev/vitest/issues/9928) [<samp>(56115)</samp>](https://github.com/vitest-dev/vitest/commit/561150036)
##### 🐞 Bug Fixes
- Mark `TestProject.testFilesList` internal properly - by [@​sapphi-red](https://github.com/sapphi-red) in [#​9867](https://github.com/vitest-dev/vitest/issues/9867) [<samp>(54f26)</samp>](https://github.com/vitest-dev/vitest/commit/54f2660f5)
- Detect fixture that returns without calling `use` - by [@​oilater](https://github.com/oilater) in [#​9831](https://github.com/vitest-dev/vitest/issues/9831) and [#​9861](https://github.com/vitest-dev/vitest/issues/9861) [<samp>(633ae)</samp>](https://github.com/vitest-dev/vitest/commit/633ae2303)
- Drop vite 8.beta support - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9862](https://github.com/vitest-dev/vitest/issues/9862) [<samp>(b78f5)</samp>](https://github.com/vitest-dev/vitest/commit/b78f5389d)
- Type regression in vi.mocked() static class methods - by [@​purepear](https://github.com/purepear) and [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9857](https://github.com/vitest-dev/vitest/issues/9857) [<samp>(90926)</samp>](https://github.com/vitest-dev/vitest/commit/90926641b)
- Properly re-evaluate actual modules of mocked external - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9898](https://github.com/vitest-dev/vitest/issues/9898) [<samp>(ae5ec)</samp>](https://github.com/vitest-dev/vitest/commit/ae5ec03ef)
- Preserve coverage report when html reporter overlaps - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9889](https://github.com/vitest-dev/vitest/issues/9889) [<samp>(2d81a)</samp>](https://github.com/vitest-dev/vitest/commit/2d81ad897)
- Provide `vi.advanceTimers` to the preview provider - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9891](https://github.com/vitest-dev/vitest/issues/9891) [<samp>(1bc3e)</samp>](https://github.com/vitest-dev/vitest/commit/1bc3e63be)
- Don't leak event listener in playwright provider - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9910](https://github.com/vitest-dev/vitest/issues/9910) [<samp>(d9355)</samp>](https://github.com/vitest-dev/vitest/commit/d93550ff7)
- Open browser in `--standalone` mode without running tests - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9911](https://github.com/vitest-dev/vitest/issues/9911) [<samp>(e78ad)</samp>](https://github.com/vitest-dev/vitest/commit/e78adcf97)
- Guard disposable and optional `body` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9912](https://github.com/vitest-dev/vitest/issues/9912) [<samp>(6fdb2)</samp>](https://github.com/vitest-dev/vitest/commit/6fdb2ba61)
- Resolve `retry.condition` RegExp serialization issue - by [@​nstepien](https://github.com/nstepien) and [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9942](https://github.com/vitest-dev/vitest/issues/9942) [<samp>(7b605)</samp>](https://github.com/vitest-dev/vitest/commit/7b6054328)
- **collect**:
- Don't treat extra props on `test` return as tests - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9871](https://github.com/vitest-dev/vitest/issues/9871) [<samp>(141e7)</samp>](https://github.com/vitest-dev/vitest/commit/141e72aa1)
- **coverage**:
- Simplify provider types - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9931](https://github.com/vitest-dev/vitest/issues/9931) [<samp>(aaf9f)</samp>](https://github.com/vitest-dev/vitest/commit/aaf9f18ae)
- Load built-in provider without module runner - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9939](https://github.com/vitest-dev/vitest/issues/9939) [<samp>(bf892)</samp>](https://github.com/vitest-dev/vitest/commit/bf8920817)
- **expect**:
- Soft assertions continue after .resolves/.rejects promise errors - by [@​mixelburg](https://github.com/mixelburg), **Maks Pikov**, **Claude Opus 4.6 (1M context)** and [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9843](https://github.com/vitest-dev/vitest/issues/9843) [<samp>(6d74b)</samp>](https://github.com/vitest-dev/vitest/commit/6d74b4948)
- Fix sinon-chai style API - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9943](https://github.com/vitest-dev/vitest/issues/9943) [<samp>(0f08d)</samp>](https://github.com/vitest-dev/vitest/commit/0f08dda2c)
- **pretty-format**:
- Limit output for large object - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6 (1M context)** in [#​9949](https://github.com/vitest-dev/vitest/issues/9949) [<samp>(0d5f9)</samp>](https://github.com/vitest-dev/vitest/commit/0d5f9d6ef)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.0...v4.1.1)
### [`v4.1.0`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.0)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.18...v4.1.0)
Vitest 4.1 is out!
This release page lists all changes made to the project during the 4.1 beta. To get a review of all the new features, read our [blog post](https://vitest.dev/blog/vitest-4-1).
##### 🚀 Features
- Return a disposable from doMock() - by [@​kirkwaiblinger](https://github.com/kirkwaiblinger) in [#​9332](https://github.com/vitest-dev/vitest/issues/9332) [<samp>(e3e65)</samp>](https://github.com/vitest-dev/vitest/commit/e3e659a96)
- Added chai style assertions - by [@​ronnakamoto](https://github.com/ronnakamoto) and [@​sheremet-va](https://github.com/sheremet-va) in [#​8842](https://github.com/vitest-dev/vitest/issues/8842) [<samp>(841df)</samp>](https://github.com/vitest-dev/vitest/commit/841df9ac5)
- Update to sinon/fake-timers v15 and add `setTickMode` to timer controls - by [@​atscott](https://github.com/atscott) and [@​sheremet-va](https://github.com/sheremet-va) in [#​8726](https://github.com/vitest-dev/vitest/issues/8726) [<samp>(4b480)</samp>](https://github.com/vitest-dev/vitest/commit/4b480aaed)
- Expose matcher types - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9448](https://github.com/vitest-dev/vitest/issues/9448) [<samp>(3e4b9)</samp>](https://github.com/vitest-dev/vitest/commit/3e4b913b1)
- Add `toTestSpecification` to reported tasks - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9464](https://github.com/vitest-dev/vitest/issues/9464) [<samp>(1a470)</samp>](https://github.com/vitest-dev/vitest/commit/1a4705da9)
- Show a warning if `vi.mock` or `vi.hoisted` are declared outside of top level of the module - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9387](https://github.com/vitest-dev/vitest/issues/9387) [<samp>(5db54)</samp>](https://github.com/vitest-dev/vitest/commit/5db54a468)
- Track and display expectedly failed tests (.fails) in UI and CLI - by [@​Copilot](https://github.com/Copilot), **sheremet-va** and [@​sheremet-va](https://github.com/sheremet-va) in [#​9476](https://github.com/vitest-dev/vitest/issues/9476) [<samp>(77d75)</samp>](https://github.com/vitest-dev/vitest/commit/77d75fd34)
- Support tags - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9478](https://github.com/vitest-dev/vitest/issues/9478) [<samp>(de7c8)</samp>](https://github.com/vitest-dev/vitest/commit/de7c8a521)
- Implement `aroundEach` and `aroundAll` hooks - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9450](https://github.com/vitest-dev/vitest/issues/9450) [<samp>(2a8cb)</samp>](https://github.com/vitest-dev/vitest/commit/2a8cb9dc2)
- Stabilize experimental features - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9529](https://github.com/vitest-dev/vitest/issues/9529) [<samp>(b5fd2)</samp>](https://github.com/vitest-dev/vitest/commit/b5fd2a16a)
- Accept `new` or `all` in `--update` flag - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9543](https://github.com/vitest-dev/vitest/issues/9543) [<samp>(a5acf)</samp>](https://github.com/vitest-dev/vitest/commit/a5acf28a5)
- Support `meta` in test options - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9535](https://github.com/vitest-dev/vitest/issues/9535) [<samp>(7d622)</samp>](https://github.com/vitest-dev/vitest/commit/7d622e3d1)
- Support type inference with a new `test.extend` syntax - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9550](https://github.com/vitest-dev/vitest/issues/9550) [<samp>(e5385)</samp>](https://github.com/vitest-dev/vitest/commit/e53854fcc)
- Support vite 8 beta, fix type issues in the config with different vite versions - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9587](https://github.com/vitest-dev/vitest/issues/9587) [<samp>(99028)</samp>](https://github.com/vitest-dev/vitest/commit/990281dfd)
- Add assertion helper to hide internal stack traces - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9594](https://github.com/vitest-dev/vitest/issues/9594) [<samp>(eeb0a)</samp>](https://github.com/vitest-dev/vitest/commit/eeb0ae2f8)
- Store failure screenshots using artifacts API - by [@​macarie](https://github.com/macarie) in [#​9588](https://github.com/vitest-dev/vitest/issues/9588) [<samp>(24603)</samp>](https://github.com/vitest-dev/vitest/commit/24603e3c4)
- Allow `vitest list` to statically collect tests instead of running files to collect them - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9630](https://github.com/vitest-dev/vitest/issues/9630) [<samp>(7a8e7)</samp>](https://github.com/vitest-dev/vitest/commit/7a8e7fc20)
- Add `--detect-async-leaks` - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9528](https://github.com/vitest-dev/vitest/issues/9528) [<samp>(c594d)</samp>](https://github.com/vitest-dev/vitest/commit/c594d4af3)
- Implement `mockThrow` and `mockThrowOnce` - by [@​thor-juhasz](https://github.com/thor-juhasz) and [@​sheremet-va](https://github.com/sheremet-va) in [#​9512](https://github.com/vitest-dev/vitest/issues/9512) [<samp>(61917)</samp>](https://github.com/vitest-dev/vitest/commit/619179fb7)
- Support `update: "none"` and add docs about snapshots behavior on CI - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9700](https://github.com/vitest-dev/vitest/issues/9700) [<samp>(05f18)</samp>](https://github.com/vitest-dev/vitest/commit/05f1854e2)
- Support playwright `launchOptions` with `connectOptions` - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9702](https://github.com/vitest-dev/vitest/issues/9702) [<samp>(f0ff1)</samp>](https://github.com/vitest-dev/vitest/commit/f0ff1b2a0)
- Add `page/locator.mark` API to enhance playwright trace - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9652](https://github.com/vitest-dev/vitest/issues/9652) [<samp>(d0ee5)</samp>](https://github.com/vitest-dev/vitest/commit/d0ee546fe)
- **api**:
- Support tests starting or ending with `test` in `experimental_parseSpecification` - by [@​jgillick](https://github.com/jgillick) and **Jeremy Gillick** in [#​9235](https://github.com/vitest-dev/vitest/issues/9235) [<samp>(2f367)</samp>](https://github.com/vitest-dev/vitest/commit/2f367fad3)
- Add filters to `createSpecification` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9336](https://github.com/vitest-dev/vitest/issues/9336) [<samp>(c8e6c)</samp>](https://github.com/vitest-dev/vitest/commit/c8e6c7fbf)
- Expose `runTestFiles` as alternative to `runTestSpecifications` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9443](https://github.com/vitest-dev/vitest/issues/9443) [<samp>(43d76)</samp>](https://github.com/vitest-dev/vitest/commit/43d761821)
- Add `allowWrite` and `allowExec` options to `api` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9350](https://github.com/vitest-dev/vitest/issues/9350) [<samp>(20e00)</samp>](https://github.com/vitest-dev/vitest/commit/20e00ef78)
- Allow passing down test cases to `toTestSpecification` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9627](https://github.com/vitest-dev/vitest/issues/9627) [<samp>(6f17d)</samp>](https://github.com/vitest-dev/vitest/commit/6f17d5ddf)
- **browser**:
- Add `userEvent.wheel` API - by [@​macarie](https://github.com/macarie) in [#​9188](https://github.com/vitest-dev/vitest/issues/9188) [<samp>(66080)</samp>](https://github.com/vitest-dev/vitest/commit/660801979)
- Add `filterNode` option to prettyDOM for filtering browser assertion error output - by [@​Copilot](https://github.com/Copilot), **sheremet-va** and [@​sheremet-va](https://github.com/sheremet-va) in [#​9475](https://github.com/vitest-dev/vitest/issues/9475) [<samp>(d3220)</samp>](https://github.com/vitest-dev/vitest/commit/d3220fcd8)
- Support playwright persistent context - by [@​hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 4.6** and [@​sheremet-va](https://github.com/sheremet-va) in [#​9229](https://github.com/vitest-dev/vitest/issues/9229) [<samp>(f865d)</samp>](https://github.com/vitest-dev/vitest/commit/f865d2ba4)
- Added `detailsPanelPosition` option and button - by [@​shairez](https://github.com/shairez) in [#​9525](https://github.com/vitest-dev/vitest/issues/9525) [<samp>(c8a31)</samp>](https://github.com/vitest-dev/vitest/commit/c8a31147c)
- Use BlazeDiff instead of pixelmatch - by [@​macarie](https://github.com/macarie) in [#​9514](https://github.com/vitest-dev/vitest/issues/9514) [<samp>(30936)</samp>](https://github.com/vitest-dev/vitest/commit/309362089)
- Add `findElement` and enable strict mode in webdriverio and preview - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9677](https://github.com/vitest-dev/vitest/issues/9677) [<samp>(c3f37)</samp>](https://github.com/vitest-dev/vitest/commit/c3f37721c)
- **cli**:
- Add [@​bomb](https://github.com/bomb).sh/tab completions - by [@​AmirSa12](https://github.com/AmirSa12) and [@​sheremet-va](https://github.com/sheremet-va) in [#​8639](https://github.com/vitest-dev/vitest/issues/8639) [<samp>(200f3)</samp>](https://github.com/vitest-dev/vitest/commit/200f31704)
- **coverage**:
- Support `ignore start/stop` ignore hints - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9204](https://github.com/vitest-dev/vitest/issues/9204) [<samp>(e59c9)</samp>](https://github.com/vitest-dev/vitest/commit/e59c94ba6)
- Add `coverage.changed` option to report only changed files - by [@​kykim00](https://github.com/kykim00) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9521](https://github.com/vitest-dev/vitest/issues/9521) [<samp>(1d939)</samp>](https://github.com/vitest-dev/vitest/commit/1d9392c67)
- **experimental**:
- Add `onModuleRunner` hook to `worker.init` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9286](https://github.com/vitest-dev/vitest/issues/9286) [<samp>(e977f)</samp>](https://github.com/vitest-dev/vitest/commit/e977f3deb)
- Option to disable the module runner - by [@​sheremet-va](https://github.com/sheremet-va) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9210](https://github.com/vitest-dev/vitest/issues/9210) [<samp>(9be61)</samp>](https://github.com/vitest-dev/vitest/commit/9be6121ee)
- Add `importDurations: { limit, print }` options - by [@​hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 4.6** and [@​sheremet-va](https://github.com/sheremet-va) in [#​9401](https://github.com/vitest-dev/vitest/issues/9401) [<samp>(7e10f)</samp>](https://github.com/vitest-dev/vitest/commit/7e10fb356)
- Add print and fail thresholds for `importDurations` - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9533](https://github.com/vitest-dev/vitest/issues/9533) [<samp>(3f7a5)</samp>](https://github.com/vitest-dev/vitest/commit/3f7a5f8f8)
- **fixtures**:
- Pass down file context to `beforeAll`/`afterAll` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9572](https://github.com/vitest-dev/vitest/issues/9572) [<samp>(c8339)</samp>](https://github.com/vitest-dev/vitest/commit/c83395f2c)
- **reporters**:
- Add `agent` reporter to reduce ai agent token usage - by [@​cpojer](https://github.com/cpojer) in [#​9779](https://github.com/vitest-dev/vitest/issues/9779) [<samp>(3e9e0)</samp>](https://github.com/vitest-dev/vitest/commit/3e9e096a2)
- **runner**:
- Enhance `retry` options - by [@​MazenSamehR](https://github.com/MazenSamehR), **Matan Shavit**, [@​AriPerkkio](https://github.com/AriPerkkio) and [@​sheremet-va](https://github.com/sheremet-va) in [#​9370](https://github.com/vitest-dev/vitest/issues/9370) [<samp>(9e4cf)</samp>](https://github.com/vitest-dev/vitest/commit/9e4cfd295)
- **ui**:
- Allow run individual test/suites - by [@​userquin](https://github.com/userquin) in [#​9465](https://github.com/vitest-dev/vitest/issues/9465) [<samp>(73b10)</samp>](https://github.com/vitest-dev/vitest/commit/73b10f1b9)
- Add project filter/sort support - by [@​userquin](https://github.com/userquin) in [#​8689](https://github.com/vitest-dev/vitest/issues/8689) [<samp>(0c7ea)</samp>](https://github.com/vitest-dev/vitest/commit/0c7eaac16)
- Add duration sorting to explorer - by [@​julianhahn](https://github.com/julianhahn) and [@​cursoragent](https://github.com/cursoragent) in [#​9603](https://github.com/vitest-dev/vitest/issues/9603) [<samp>(209b1)</samp>](https://github.com/vitest-dev/vitest/commit/209b1b0e1)
- Implement filter for slow tests - by [@​DerYeger](https://github.com/DerYeger) and [@​userquin](https://github.com/userquin) in [#​9705](https://github.com/vitest-dev/vitest/issues/9705) [<samp>(8880c)</samp>](https://github.com/vitest-dev/vitest/commit/8880c907a)
- **vitest**:
- Add run summary in GitHub Actions Reporter - by [@​macarie](https://github.com/macarie) and **jhnance** in [#​9579](https://github.com/vitest-dev/vitest/issues/9579) [<samp>(96bfc)</samp>](https://github.com/vitest-dev/vitest/commit/96bfc8345)
##### 🐞 Bug Fixes
- Deprecate several vitest/\* entry points - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9347](https://github.com/vitest-dev/vitest/issues/9347) [<samp>(fd459)</samp>](https://github.com/vitest-dev/vitest/commit/fd45928be)
- Use `meta.url` in `createRequire` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9441](https://github.com/vitest-dev/vitest/issues/9441) [<samp>(e3422)</samp>](https://github.com/vitest-dev/vitest/commit/e34225563)
- Preact browser mode init example of render function not async - by [@​WuMingDao](https://github.com/WuMingDao) in [#​9375](https://github.com/vitest-dev/vitest/issues/9375) [<samp>(2bea5)</samp>](https://github.com/vitest-dev/vitest/commit/2bea549c7)
- Deprecate unused types in matcher context - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9449](https://github.com/vitest-dev/vitest/issues/9449) [<samp>(20f87)</samp>](https://github.com/vitest-dev/vitest/commit/20f8753a2)
- Handle `external/noExternal` during `configEnvironment` hook - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9508](https://github.com/vitest-dev/vitest/issues/9508) [<samp>(59ea2)</samp>](https://github.com/vitest-dev/vitest/commit/59ea27c1c)
- Replace default ssr environment runner with Vitest server module runner - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9506](https://github.com/vitest-dev/vitest/issues/9506) [<samp>(cd5db)</samp>](https://github.com/vitest-dev/vitest/commit/cd5db660c)
- Propagate experimental CLI options to child projects - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9531](https://github.com/vitest-dev/vitest/issues/9531) [<samp>(b624f)</samp>](https://github.com/vitest-dev/vitest/commit/b624fae53)
- Show a warning when `browser.isolate` is used - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9410](https://github.com/vitest-dev/vitest/issues/9410) [<samp>(3d48e)</samp>](https://github.com/vitest-dev/vitest/commit/3d48ebcb9)
- Fix `vi.mock({ spy: true })` node v8 coverage - by [@​hi-ogawa](https://github.com/hi-ogawa), **hi-ogawa** and **Claude Opus 4.6** in [#​9541](https://github.com/vitest-dev/vitest/issues/9541) [<samp>(687b6)</samp>](https://github.com/vitest-dev/vitest/commit/687b633c1)
- Don't show internal ssr handler in errors - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9547](https://github.com/vitest-dev/vitest/issues/9547) [<samp>(76c43)</samp>](https://github.com/vitest-dev/vitest/commit/76c4397b5)
- Close vitest if it failed to start - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9573](https://github.com/vitest-dev/vitest/issues/9573) [<samp>(728ba)</samp>](https://github.com/vitest-dev/vitest/commit/728ba617f)
- Fix ssr environment runner in project - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9584](https://github.com/vitest-dev/vitest/issues/9584) [<samp>(09006)</samp>](https://github.com/vitest-dev/vitest/commit/090064f97)
- Trim trailing white spaces in code block - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9591](https://github.com/vitest-dev/vitest/issues/9591) [<samp>(f78be)</samp>](https://github.com/vitest-dev/vitest/commit/f78bea992)
- Support inline snapshot inside test.for/each - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9590](https://github.com/vitest-dev/vitest/issues/9590) [<samp>(615fd)</samp>](https://github.com/vitest-dev/vitest/commit/615fd521e)
- Apply source maps for external module stack trace - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9152](https://github.com/vitest-dev/vitest/issues/9152) [<samp>(79e20)</samp>](https://github.com/vitest-dev/vitest/commit/79e20d5a3)
- Remove the `.name` from statically collected test - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9596](https://github.com/vitest-dev/vitest/issues/9596) [<samp>(b66ff)</samp>](https://github.com/vitest-dev/vitest/commit/b66ff691a)
- Don't suppress warnings on pnp - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9602](https://github.com/vitest-dev/vitest/issues/9602) [<samp>(89cbd)</samp>](https://github.com/vitest-dev/vitest/commit/89cbdaea3)
- Support snapshot with `expect.soft` - by [@​iumehara](https://github.com/iumehara), [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9231](https://github.com/vitest-dev/vitest/issues/9231) [<samp>(3eb2c)</samp>](https://github.com/vitest-dev/vitest/commit/3eb2cd541)
- Log seed when only `sequence.shuffle.tests` is enabled - by [@​kaigritun](https://github.com/kaigritun), **Kai Gritun** and [@​sheremet-va](https://github.com/sheremet-va) in [#​9576](https://github.com/vitest-dev/vitest/issues/9576) [<samp>(8182b)</samp>](https://github.com/vitest-dev/vitest/commit/8182b77ad)
- Externalize `expect/src/utils` from `vitest` - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9616](https://github.com/vitest-dev/vitest/issues/9616) [<samp>(48739)</samp>](https://github.com/vitest-dev/vitest/commit/487398422)
- Ignore test.override during static collection - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9620](https://github.com/vitest-dev/vitest/issues/9620) [<samp>(09174)</samp>](https://github.com/vitest-dev/vitest/commit/0917470ce)
- Increase stacktrace limit for `--detect-async-leaks` - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9638](https://github.com/vitest-dev/vitest/issues/9638) [<samp>(9fd4c)</samp>](https://github.com/vitest-dev/vitest/commit/9fd4ce533)
- Hanging-reporter link in cli - by [@​flx-sta](https://github.com/flx-sta) in [#​9649](https://github.com/vitest-dev/vitest/issues/9649) [<samp>(7c103)</samp>](https://github.com/vitest-dev/vitest/commit/7c103055c)
- Fix teardown timeout of `aroundEach/All` when inner `aroundEach/All` throws - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9657](https://github.com/vitest-dev/vitest/issues/9657) [<samp>(4ec6c)</samp>](https://github.com/vitest-dev/vitest/commit/4ec6cb305)
- Fix ui mode / html reporter and coverage integration - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9626](https://github.com/vitest-dev/vitest/issues/9626) [<samp>(86fad)</samp>](https://github.com/vitest-dev/vitest/commit/86fad4b42)
- Don't continue when `aroundEach/All` setup timed out - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9670](https://github.com/vitest-dev/vitest/issues/9670) [<samp>(bb013)</samp>](https://github.com/vitest-dev/vitest/commit/bb013d54b)
- Align `VitestRunnerConfig` optional fields with `SerializedConfig` - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9661](https://github.com/vitest-dev/vitest/issues/9661) [<samp>(79520)</samp>](https://github.com/vitest-dev/vitest/commit/79520d82d)
- Handle Symbol values in format utility - by [@​nami8824](https://github.com/nami8824) in [#​9658](https://github.com/vitest-dev/vitest/issues/9658) [<samp>(0583f)</samp>](https://github.com/vitest-dev/vitest/commit/0583f067e)
- Deprecate `toBe*` spy assertions in favor of `toHaveBeen*` (and `toThrowError`) - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9665](https://github.com/vitest-dev/vitest/issues/9665) [<samp>(4d390)</samp>](https://github.com/vitest-dev/vitest/commit/4d390dfe9)
- Don't propagate nested `aroundEach/All` errors but aggregate them on runner - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9673](https://github.com/vitest-dev/vitest/issues/9673) [<samp>(b6365)</samp>](https://github.com/vitest-dev/vitest/commit/b63653f5a)
- Show a better error if there is a pending dynamic import - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9676](https://github.com/vitest-dev/vitest/issues/9676) [<samp>(7ef5c)</samp>](https://github.com/vitest-dev/vitest/commit/7ef5cf4b7)
- Preserve stack trace of `resolves/rejects` chained assertion error - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9679](https://github.com/vitest-dev/vitest/issues/9679) [<samp>(c6151)</samp>](https://github.com/vitest-dev/vitest/commit/c61511d4a)
- Handle module-sync condition in vmThreads/vmForks require - by [@​lesleh](https://github.com/lesleh) in [#​9650](https://github.com/vitest-dev/vitest/issues/9650) and [#​9651](https://github.com/vitest-dev/vitest/issues/9651) [<samp>(bb203)</samp>](https://github.com/vitest-dev/vitest/commit/bb20389f4)
- Hooks should respect `maxConcurrency` - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9653](https://github.com/vitest-dev/vitest/issues/9653) [<samp>(16d13)</samp>](https://github.com/vitest-dev/vitest/commit/16d13d981)
- Recursively autospy module object - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9687](https://github.com/vitest-dev/vitest/issues/9687) [<samp>(695a8)</samp>](https://github.com/vitest-dev/vitest/commit/695a86b41)
- Remove trailing spaces from diff error log - by [@​hi-ogawa](https://github.com/hi-ogawa) and [@​sheremet-va](https://github.com/sheremet-va) in [#​9680](https://github.com/vitest-dev/vitest/issues/9680) [<samp>(395d1)</samp>](https://github.com/vitest-dev/vitest/commit/395d1a29e)
- Respect project `resolve.conditions` for externals - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9717](https://github.com/vitest-dev/vitest/issues/9717) [<samp>(1d498)</samp>](https://github.com/vitest-dev/vitest/commit/1d4987498)
- Use object for WeakMap instead of a symbol to support webcontainers - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9731](https://github.com/vitest-dev/vitest/issues/9731) [<samp>(c5225)</samp>](https://github.com/vitest-dev/vitest/commit/c52259330)
- Fix re-mocking virtual module - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9748](https://github.com/vitest-dev/vitest/issues/9748) [<samp>(3cbbb)</samp>](https://github.com/vitest-dev/vitest/commit/3cbbb17f1)
- Cancelling should stop current test immediately - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9729](https://github.com/vitest-dev/vitest/issues/9729) [<samp>(0cb2f)</samp>](https://github.com/vitest-dev/vitest/commit/0cb2f7239)
- Make `mockObject` change backwards compatible - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9744](https://github.com/vitest-dev/vitest/issues/9744) [<samp>(84c69)</samp>](https://github.com/vitest-dev/vitest/commit/84c69497f)
- Fix `URL.name` on jsdom - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9767](https://github.com/vitest-dev/vitest/issues/9767) [<samp>(031f3)</samp>](https://github.com/vitest-dev/vitest/commit/031f3a374)
- Save and restore module graph in blob reporter - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9740](https://github.com/vitest-dev/vitest/issues/9740) [<samp>(84355)</samp>](https://github.com/vitest-dev/vitest/commit/843554bf0)
- Don't silence reporter errors from test runtime events handler in normal run and --merge-reports - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9727](https://github.com/vitest-dev/vitest/issues/9727) [<samp>(4072d)</samp>](https://github.com/vitest-dev/vitest/commit/4072d0132)
- Fix `vi.importActual()` for virtual modules - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9772](https://github.com/vitest-dev/vitest/issues/9772) [<samp>(1e89e)</samp>](https://github.com/vitest-dev/vitest/commit/1e89ec020)
- Throw `FixtureAccessError` if suite hook accesses undefined fixture - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9786](https://github.com/vitest-dev/vitest/issues/9786) [<samp>(fc2ce)</samp>](https://github.com/vitest-dev/vitest/commit/fc2cea2b7)
- Allow hyphens in project config file name pattern - by [@​Koutaro-Hanabusa](https://github.com/Koutaro-Hanabusa) and [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9760](https://github.com/vitest-dev/vitest/issues/9760) [<samp>(33e96)</samp>](https://github.com/vitest-dev/vitest/commit/33e96311a)
- Manual and redirect mock shouldn't `load` or `transform` original module - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9774](https://github.com/vitest-dev/vitest/issues/9774) [<samp>(a8216)</samp>](https://github.com/vitest-dev/vitest/commit/a8216b001)
- `hideSkippedTests` should not hide `test.todo` - by [@​oilater](https://github.com/oilater) in [#​9562](https://github.com/vitest-dev/vitest/issues/9562) and [#​9781](https://github.com/vitest-dev/vitest/issues/9781) [<samp>(8181e)</samp>](https://github.com/vitest-dev/vitest/commit/8181e06e7)
- Allow catch/finally for async assertion - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9827](https://github.com/vitest-dev/vitest/issues/9827) [<samp>(031f0)</samp>](https://github.com/vitest-dev/vitest/commit/031f02a89)
- Resolve fixture overrides from test's suite in `beforeEach` hooks - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9826](https://github.com/vitest-dev/vitest/issues/9826) [<samp>(99e52)</samp>](https://github.com/vitest-dev/vitest/commit/99e52fe58)
- Use isAgent check, not just TTY, for watch mode - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9841](https://github.com/vitest-dev/vitest/issues/9841) [<samp>(c3cac)</samp>](https://github.com/vitest-dev/vitest/commit/c3cac1c1b)
- Use `performance.now` to measure test timeout duration - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9795](https://github.com/vitest-dev/vitest/issues/9795) [<samp>(f48a6)</samp>](https://github.com/vitest-dev/vitest/commit/f48a60114)
- Correctly identify concurrent test during static analysis - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9846](https://github.com/vitest-dev/vitest/issues/9846) [<samp>(1de0a)</samp>](https://github.com/vitest-dev/vitest/commit/1de0aa22d)
- **browser**:
- Avoid updating screenshots when `toMatchScreenshot` passes - by [@​macarie](https://github.com/macarie) in [#​9289](https://github.com/vitest-dev/vitest/issues/9289) [<samp>(46aab)</samp>](https://github.com/vitest-dev/vitest/commit/46aabaa44)
- Hide injected data-testid attributes - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9503](https://github.com/vitest-dev/vitest/issues/9503) [<samp>(c8d2c)</samp>](https://github.com/vitest-dev/vitest/commit/c8d2c411c)
- Throw an error if iframe was reloaded - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9516](https://github.com/vitest-dev/vitest/issues/9516) [<samp>(73a81)</samp>](https://github.com/vitest-dev/vitest/commit/73a81f880)
- Encode projectName in browser client URL - by [@​dkkim0122](https://github.com/dkkim0122) in [#​9523](https://github.com/vitest-dev/vitest/issues/9523) [<samp>(5b164)</samp>](https://github.com/vitest-dev/vitest/commit/5b16483c3)
- Don't take failure screenshot if tests have artifacts created by `toMatchScreenshot` - by [@​macarie](https://github.com/macarie) in [#​9552](https://github.com/vitest-dev/vitest/issues/9552) [<samp>(83ca0)</samp>](https://github.com/vitest-dev/vitest/commit/83ca02547)
- Remove `--remote-debugging-address` from chrome args - by [@​hi-ogawa](https://github.com/hi-ogawa) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9712](https://github.com/vitest-dev/vitest/issues/9712) [<samp>(f09bb)</samp>](https://github.com/vitest-dev/vitest/commit/f09bb5c32)
- Make sure userEvent actions support `ensureAwaited` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9732](https://github.com/vitest-dev/vitest/issues/9732) [<samp>(97685)</samp>](https://github.com/vitest-dev/vitest/commit/9768517b8)
- Types of `getCDPSession` and `cdp()` - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9716](https://github.com/vitest-dev/vitest/issues/9716) [<samp>(689a2)</samp>](https://github.com/vitest-dev/vitest/commit/689a22a1b)
- Skip esbuild.legalComments when using rolldown-vite - by [@​Copilot](https://github.com/Copilot), **hi-ogawa** and [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9803](https://github.com/vitest-dev/vitest/issues/9803) [<samp>(3505f)</samp>](https://github.com/vitest-dev/vitest/commit/3505fa5a3)
- **chai**:
- Don't allow `deepEqual` in the config because it's not serializable - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9666](https://github.com/vitest-dev/vitest/issues/9666) [<samp>(9ee99)</samp>](https://github.com/vitest-dev/vitest/commit/9ee999d73)
- **coverage**:
- Infer transform mode for uncovered files - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9435](https://github.com/vitest-dev/vitest/issues/9435) [<samp>(f3967)</samp>](https://github.com/vitest-dev/vitest/commit/f396792d6)
- `thresholds.autoUpdate` to preserve ending whitespace - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9436](https://github.com/vitest-dev/vitest/issues/9436) [<samp>(7e534)</samp>](https://github.com/vitest-dev/vitest/commit/7e534a0b6)
- **deps**:
- Update all non-major dependencies - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9192](https://github.com/vitest-dev/vitest/issues/9192) [<samp>(90c30)</samp>](https://github.com/vitest-dev/vitest/commit/90c302f3b)
- Update all non-major dependencies - in [#​9485](https://github.com/vitest-dev/vitest/issues/9485) [<samp>(c0118)</samp>](https://github.com/vitest-dev/vitest/commit/c01186022)
- Update all non-major dependencies - in [#​9567](https://github.com/vitest-dev/vitest/issues/9567) [<samp>(13c9e)</samp>](https://github.com/vitest-dev/vitest/commit/13c9e022b)
- **docs**:
- Fix old `/config/#option` hash links causing hydration errors - by [@​hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 4.6** and [@​sheremet-va](https://github.com/sheremet-va) in [#​9610](https://github.com/vitest-dev/vitest/issues/9610) [<samp>(a603c)</samp>](https://github.com/vitest-dev/vitest/commit/a603c3a30)
- **expect**:
- `toMatchObject(Map/Set)` should expect `Map/Set` on left hand side - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9532](https://github.com/vitest-dev/vitest/issues/9532) [<samp>(381da)</samp>](https://github.com/vitest-dev/vitest/commit/381da4a9d)
- Fix objectContaining with proxy - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9554](https://github.com/vitest-dev/vitest/issues/9554) [<samp>(7ce34)</samp>](https://github.com/vitest-dev/vitest/commit/7ce3417b1)
- Support arbitrary value equality for `toThrow` and make Error detection robust - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9570](https://github.com/vitest-dev/vitest/issues/9570) [<samp>(de215)</samp>](https://github.com/vitest-dev/vitest/commit/de215c19c)
- **mock**:
- Inject helpers after hashbang if present - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9545](https://github.com/vitest-dev/vitest/issues/9545) [<samp>(65432)</samp>](https://github.com/vitest-dev/vitest/commit/65432a74b)
- **mocker**:
- Update vite's peer dependency range - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9808](https://github.com/vitest-dev/vitest/issues/9808) [<samp>(36f9a)</samp>](https://github.com/vitest-dev/vitest/commit/36f9a81a2)
- **reporter**:
- `dot` reporter leaves pending tests - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9684](https://github.com/vitest-dev/vitest/issues/9684) [<samp>(4d793)</samp>](https://github.com/vitest-dev/vitest/commit/4d7938a56)
- **runner**:
- Mark repeated tests as finished on last run - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9707](https://github.com/vitest-dev/vitest/issues/9707) [<samp>(cc735)</samp>](https://github.com/vitest-dev/vitest/commit/cc735970a)
- **spy**:
- Support deep partial in vi.mocked - by [@​j2h30728](https://github.com/j2h30728) in [#​8152](https://github.com/vitest-dev/vitest/issues/8152) and [#​9493](https://github.com/vitest-dev/vitest/issues/9493) [<samp>(71cb5)</samp>](https://github.com/vitest-dev/vitest/commit/71cb51ffc)
- Fallback to object accessor if descriptor's value is `undefined` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9511](https://github.com/vitest-dev/vitest/issues/9511) [<samp>(6f181)</samp>](https://github.com/vitest-dev/vitest/commit/6f18103fa)
- Throw correct errors when shorthand methods are used on a class - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9513](https://github.com/vitest-dev/vitest/issues/9513) [<samp>(5d0fd)</samp>](https://github.com/vitest-dev/vitest/commit/5d0fd3b62)
- **types**:
- `bench.reporters` no longer gives type errors when passing file name string paths - by [@​Bertie690](https://github.com/Bertie690) in [#​9695](https://github.com/vitest-dev/vitest/issues/9695) [<samp>(093c8)</samp>](https://github.com/vitest-dev/vitest/commit/093c8f6b5)
- **ui**:
- Process artifact attachments when generating HTML reporter - by [@​macarie](https://github.com/macarie) in [#​9472](https://github.com/vitest-dev/vitest/issues/9472) [<samp>(96eb9)</samp>](https://github.com/vitest-dev/vitest/commit/96eb92826)
- Don't fail if --ui and --root are specified together - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9536](https://github.com/vitest-dev/vitest/issues/9536) [<samp>(d9305)</samp>](https://github.com/vitest-dev/vitest/commit/d93055fc7)
##### 🏎 Performance
- **pretty-format**: Combine DOMElement plugins - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9581](https://github.com/vitest-dev/vitest/issues/9581) [<samp>(da85a)</samp>](https://github.com/vitest-dev/vitest/commit/da85a3267)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.17...v4.1.0)
### [`v4.0.18`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.18)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.17...v4.0.18)
##### 🚀 Experimental Features
- **experimental**: Add `onModuleRunner` hook to `worker.init` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9286](https://github.com/vitest-dev/vitest/issues/9286) [<samp>(ea837)</samp>](https://github.com/vitest-dev/vitest/commit/ea837de7d)
##### 🐞 Bug Fixes
- Use `meta.url` in `createRequire` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9441](https://github.com/vitest-dev/vitest/issues/9441) [<samp>(e0572)</samp>](https://github.com/vitest-dev/vitest/commit/e057281ca)
- **browser**: Hide injected data-testid attributes - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9503](https://github.com/vitest-dev/vitest/issues/9503) [<samp>(f8989)</samp>](https://github.com/vitest-dev/vitest/commit/f89899cd8)
- **ui**: Process artifact attachments when generating HTML reporter - by [@​macarie](https://github.com/macarie) in [#​9472](https://github.com/vitest-dev/vitest/issues/9472) [<samp>(22543)</samp>](https://github.com/vitest-dev/vitest/commit/225435647)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.17...v4.0.18)
### [`v4.0.17`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.17)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.16...v4.0.17)
##### 🚀 Experimental Features
- Support openTelemetry for browser mode - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9180](https://github.com/vitest-dev/vitest/issues/9180) [<samp>(1ec3a)</samp>](https://github.com/vitest-dev/vitest/commit/1ec3a8b68)
- Support TRACEPARENT and TRACESTATE environment variables for OpenTelemetry context propagation - by [@​Copilot](https://github.com/Copilot), **hi-ogawa** and [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9295](https://github.com/vitest-dev/vitest/issues/9295) [<samp>(876cb)</samp>](https://github.com/vitest-dev/vitest/commit/876cb84c2)
##### 🐞 Bug Fixes
- Improve asymmetric matcher diff readability by unwrapping container matchers - by [@​Copilot](https://github.com/Copilot), **sheremet-va**, **hi-ogawa** and [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9330](https://github.com/vitest-dev/vitest/issues/9330) [<samp>(b2ec7)</samp>](https://github.com/vitest-dev/vitest/commit/b2ec724a8)
- Improve runner error when importing outside of test context - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9335](https://github.com/vitest-dev/vitest/issues/9335) [<samp>(2dd3d)</samp>](https://github.com/vitest-dev/vitest/commit/2dd3dd839)
- Replace crypto.randomUUID to allow insecure environments (fix [#​9](https://github.com/vitest-dev/vitest/issues/9)… - by [@​plusgut](https://github.com/plusgut) in [#​9339](https://github.com/vitest-dev/vitest/issues/9339) and [#​9](https://github.com/vitest-dev/vitest/issues/9) [<samp>(e6a3f)</samp>](https://github.com/vitest-dev/vitest/commit/e6a3f8cc7)
- Handle null options in `addEventHandler` [#​9371](https://github.com/vitest-dev/vitest/issues/9371) - by [@​ThibautMarechal](https://github.com/ThibautMarechal) in [#​9372](https://github.com/vitest-dev/vitest/issues/9372) and [#​9371](https://github.com/vitest-dev/vitest/issues/9371) [<samp>(40841)</samp>](https://github.com/vitest-dev/vitest/commit/40841ff00)
- Typo in browser.provider error - by [@​deammer](https://github.com/deammer) in [#​9394](https://github.com/vitest-dev/vitest/issues/9394) [<samp>(4b67f)</samp>](https://github.com/vitest-dev/vitest/commit/4b67fc25a)
- **browser**:
- Fix `process.env` and `import.meta.env` defines in inline project - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9239](https://github.com/vitest-dev/vitest/issues/9239) [<samp>(b70c9)</samp>](https://github.com/vitest-dev/vitest/commit/b70c96121)
- Fix upload File instance - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9294](https://github.com/vitest-dev/vitest/issues/9294) [<samp>(b6778)</samp>](https://github.com/vitest-dev/vitest/commit/b67788c69)
- Fix invalid project token for artifacts assets - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9321](https://github.com/vitest-dev/vitest/issues/9321) [<samp>(caa7d)</samp>](https://github.com/vitest-dev/vitest/commit/caa7d73d4)
- Log `ErrorEvent.message` when unhandled `ErrorEvent.error` is null - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9322](https://github.com/vitest-dev/vitest/issues/9322) [<samp>(5d84e)</samp>](https://github.com/vitest-dev/vitest/commit/5d84eeb91)
- Support `fileParallelism` on an instance - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9328](https://github.com/vitest-dev/vitest/issues/9328) [<samp>(15006)</samp>](https://github.com/vitest-dev/vitest/commit/150065459)
- **coverage**:
- Remove unnecessary `istanbul-lib-source-maps` usage - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9344](https://github.com/vitest-dev/vitest/issues/9344) [<samp>(b0940)</samp>](https://github.com/vitest-dev/vitest/commit/b09405375)
- Apply patch from [istanbuljs/istanbuljs#837](https://github.com/istanbuljs/istanbuljs/issues/837) - by [@​AriPerkkio](https://github.com/AriPerkkio) and **sapphi-red** in [#​9413](https://github.com/vitest-dev/vitest/issues/9413) and [#​837](https://github.com/vitest-dev/vitest/issues/837) [<samp>(e05ce)</samp>](https://github.com/vitest-dev/vitest/commit/e05cedbf4)
- **fsModuleCache**:
- Don't store importers in cache - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9422](https://github.com/vitest-dev/vitest/issues/9422) [<samp>(75136)</samp>](https://github.com/vitest-dev/vitest/commit/751364eec)
- Add importers alongside importedModules - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9423](https://github.com/vitest-dev/vitest/issues/9423) [<samp>(59f92)</samp>](https://github.com/vitest-dev/vitest/commit/59f92d403)
- **mocker**:
- Fix mock transform with class - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9421](https://github.com/vitest-dev/vitest/issues/9421) [<samp>(d390e)</samp>](https://github.com/vitest-dev/vitest/commit/d390eb527)
- **pool**:
- Validate environment options when reusing the worker - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9349](https://github.com/vitest-dev/vitest/issues/9349) [<samp>(a8a88)</samp>](https://github.com/vitest-dev/vitest/commit/a8a8836e3)
- Handle worker start failures gracefully - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9337](https://github.com/vitest-dev/vitest/issues/9337) [<samp>(200da)</samp>](https://github.com/vitest-dev/vitest/commit/200dadb32)
- **reporter**:
- Report test module if it failed to run - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9272](https://github.com/vitest-dev/vitest/issues/9272) [<samp>(c7888)</samp>](https://github.com/vitest-dev/vitest/commit/c78882985)
- **runner**:
- Respect nested test.only within describe.only - by [@​Ujjwaljain16](https://github.com/Ujjwaljain16) in [#​9021](https://github.com/vitest-dev/vitest/issues/9021) and [#​9213](https://github.com/vitest-dev/vitest/issues/9213) [<samp>(55d5d)</samp>](https://github.com/vitest-dev/vitest/commit/55d5dad69)
- **typecheck**:
- Improve error message when tsc outputs help text - by [@​Ujjwaljain16](https://github.com/Ujjwaljain16) in [#​9214](https://github.com/vitest-dev/vitest/issues/9214) [<samp>(7b10a)</samp>](https://github.com/vitest-dev/vitest/commit/7b10ab4cd)
- **ui**:
- Detect gzip by magic numbers instead of Content-Type header in html reporter - by [@​Copilot](https://github.com/Copilot), **hi-ogawa** and [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9278](https://github.com/vitest-dev/vitest/issues/9278) [<samp>(dd033)</samp>](https://github.com/vitest-dev/vitest/commit/dd0331632)
- **webdriverio**:
- Fall back to WebDriver Classic [#​9244](https://github.com/vitest-dev/vitest/issues/9244) - by [@​JustasMonkev](https://github.com/JustasMonkev) in [#​9373](https://github.com/vitest-dev/vitest/issues/9373) and [#​9244](https://github.com/vitest-dev/vitest/issues/9244) [<samp>(c23dd)</samp>](https://github.com/vitest-dev/vitest/commit/c23dd11bd)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.16...v4.0.17)
### [`v4.0.16`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.16)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.15...v4.0.16)
##### 🐞 Bug Fixes
- Fix browser mode default testTimeout back to 15 seconds - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9167](https://github.com/vitest-dev/vitest/issues/9167) [<samp>(da0ad)</samp>](https://github.com/vitest-dev/vitest/commit/da0ade249)
- Avoid crashing on `process.versions` stub - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9174](https://github.com/vitest-dev/vitest/issues/9174) [<samp>(78cfb)</samp>](https://github.com/vitest-dev/vitest/commit/78cfbf99a)
- Reject calling suite function inside test - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9198](https://github.com/vitest-dev/vitest/issues/9198) [<samp>(1a259)</samp>](https://github.com/vitest-dev/vitest/commit/1a259c340)
- Allow inlining fully dynamic import - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9137](https://github.com/vitest-dev/vitest/issues/9137) [<samp>(56851)</samp>](https://github.com/vitest-dev/vitest/commit/568513ca6)
- Fix module graph UI on html reporter with headless browser mode - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9219](https://github.com/vitest-dev/vitest/issues/9219) [<samp>(60642)</samp>](https://github.com/vitest-dev/vitest/commit/60642b304)
- Log deprecated `test.poolOptions` if it's set - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9226](https://github.com/vitest-dev/vitest/issues/9226) [<samp>(f7f6a)</samp>](https://github.com/vitest-dev/vitest/commit/f7f6aa8ba)
- **browser**:
- Import `recordArtifact` from the vitest package - by [@​macarie](https://github.com/macarie) in [#​9186](https://github.com/vitest-dev/vitest/issues/9186) [<samp>(01c56)</samp>](https://github.com/vitest-dev/vitest/commit/01c56454d)
- Fix `import.meta.env` define - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9205](https://github.com/vitest-dev/vitest/issues/9205) [<samp>(01a9a)</samp>](https://github.com/vitest-dev/vitest/commit/01a9a58d9)
- String formatting bug when including placeholders in console.log - by [@​michael-debs](https://github.com/michael-debs) and [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9030](https://github.com/vitest-dev/vitest/issues/9030) and [#​9131](https://github.com/vitest-dev/vitest/issues/9131) [<samp>(84a30)</samp>](https://github.com/vitest-dev/vitest/commit/84a306210)
- **coverage**:
- Istanbul untested files source maps are off - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9208](https://github.com/vitest-dev/vitest/issues/9208) [<samp>(372e8)</samp>](https://github.com/vitest-dev/vitest/commit/372e86fde)
- **experimental**:
- Export `setupEnvironment` for custom pools - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9187](https://github.com/vitest-dev/vitest/issues/9187) [<samp>(5d26b)</samp>](https://github.com/vitest-dev/vitest/commit/5d26b87b0)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.15...v4.0.16)
### [`v4.0.15`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.15)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.14...v4.0.15)
##### 🚀 Experimental Features
- **cache**: Add opt-out on a plugin level, fix internal root cache - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9154](https://github.com/vitest-dev/vitest/issues/9154) [<samp>(a68f7)</samp>](https://github.com/vitest-dev/vitest/commit/a68f74e5e)
- **reporters**: Print import duration breakdown - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9105](https://github.com/vitest-dev/vitest/issues/9105) [<samp>(122ff)</samp>](https://github.com/vitest-dev/vitest/commit/122ff321c)
##### 🐞 Bug Fixes
- Keep built-in id as is in bun and deno - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9117](https://github.com/vitest-dev/vitest/issues/9117) [<samp>(075ab)</samp>](https://github.com/vitest-dev/vitest/commit/075ab3520)
- Use `optimizeDeps.rolldownOptions` to fix depreated warning + fix `ssr.external: true` - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9121](https://github.com/vitest-dev/vitest/issues/9121) [<samp>(fd8bd)</samp>](https://github.com/vitest-dev/vitest/commit/fd8bd6dee)
- Fix external behavior with `deps.optimizer` - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9125](https://github.com/vitest-dev/vitest/issues/9125) [<samp>(4c754)</samp>](https://github.com/vitest-dev/vitest/commit/4c75492cc)
- Very minor typo in "Chrome DevTools Protocol" - by [@​HowToTestFrontend](https://github.com/HowToTestFrontend) in [#​9146](https://github.com/vitest-dev/vitest/issues/9146) [<samp>(20997)</samp>](https://github.com/vitest-dev/vitest/commit/209976419)
- **browser**: Run `toMatchScreenshot` only once when used with `expect.element` - by [@​macarie](https://github.com/macarie) in [#​9132](https://github.com/vitest-dev/vitest/issues/9132) [<samp>(0d2e7)</samp>](https://github.com/vitest-dev/vitest/commit/0d2e7e3e2)
- **coverage**: Istanbul provider to not break source maps - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9040](https://github.com/vitest-dev/vitest/issues/9040) [<samp>(e4ca9)</samp>](https://github.com/vitest-dev/vitest/commit/e4ca917f1)
- **deps**: Update dependency tinyexec to v1 - in [#​9122](https://github.com/vitest-dev/vitest/issues/9122) [<samp>(fd786)</samp>](https://github.com/vitest-dev/vitest/commit/fd7860222)
- **docs**: Remove `--browser.provider` from docs - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9115](https://github.com/vitest-dev/vitest/issues/9115) [<samp>(120b3)</samp>](https://github.com/vitest-dev/vitest/commit/120b3dac1)
- **expect**: Preserve `currentTestName` in extended matchers - by [@​macarie](https://github.com/macarie) in [#​9106](https://github.com/vitest-dev/vitest/issues/9106) [<samp>(e4345)</samp>](https://github.com/vitest-dev/vitest/commit/e43458e02)
- **pool**: Terminate workers on `CTRL+c` forceful exits - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9140](https://github.com/vitest-dev/vitest/issues/9140) [<samp>(d57d8)</samp>](https://github.com/vitest-dev/vitest/commit/d57d8bf0a)
- **reporters**: Show project in github reporter - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9138](https://github.com/vitest-dev/vitest/issues/9138) [<samp>(bb65e)</samp>](https://github.com/vitest-dev/vitest/commit/bb65e15c7)
- **spy**: Do not mock overriden method, if parent was automocked - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9116](https://github.com/vitest-dev/vitest/issues/9116) [<samp>(1a246)</samp>](https://github.com/vitest-dev/vitest/commit/1a24607b4)
- **web-worker**: MessagePort objects passed to Worker.postMessage work when clone === "native" - by [@​whitphx](https://github.com/whitphx) in [#​9118](https://github.com/vitest-dev/vitest/issues/9118) [<samp>(deee8)</samp>](https://github.com/vitest-dev/vitest/commit/deee83e54)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.14...v4.0.15)
### [`v4.0.14`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.14)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.13...v4.0.14)
##### 🚀 Experimental Features
- **browser**: Expose `utils.configurePrettyDOM` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9103](https://github.com/vitest-dev/vitest/issues/9103) [<samp>(2cc34)</samp>](https://github.com/vitest-dev/vitest/commit/2cc34e0d4)
- **runner**: Add full names to tasks - by [@​macarie](https://github.com/macarie) in [#​9087](https://github.com/vitest-dev/vitest/issues/9087) [<samp>(821aa)</samp>](https://github.com/vitest-dev/vitest/commit/821aa2002)
- **ui**: Add tabbed failure view for `toMatchScreenshot` with comparison slider - by [@​macarie](https://github.com/macarie) in [#​8813](https://github.com/vitest-dev/vitest/issues/8813) [<samp>(c37c2)</samp>](https://github.com/vitest-dev/vitest/commit/c37c2eb0b)
##### 🐞 Bug Fixes
- Externalize before caching - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9077](https://github.com/vitest-dev/vitest/issues/9077) [<samp>(e1b2e)</samp>](https://github.com/vitest-dev/vitest/commit/e1b2e086a)
- Collect the duration of external imports - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9097](https://github.com/vitest-dev/vitest/issues/9097) [<samp>(3326c)</samp>](https://github.com/vitest-dev/vitest/commit/3326cc9f4)
- Rename `collect` to `import`, remove `prepare` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9091](https://github.com/vitest-dev/vitest/issues/9091) [<samp>(1256b)</samp>](https://github.com/vitest-dev/vitest/commit/1256b5ca3)
- **browser**:
- Unsubscribe `onCancel` on rpc destroy - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9088](https://github.com/vitest-dev/vitest/issues/9088) [<samp>(f5b72)</samp>](https://github.com/vitest-dev/vitest/commit/f5b72374b)
- Revert the viewport scaling in non-ui mode [#​9018](https://github.com/vitest-dev/vitest/issues/9018) - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9072](https://github.com/vitest-dev/vitest/issues/9072) and [#​9018](https://github.com/vitest-dev/vitest/issues/9018) [<samp>(64502)</samp>](https://github.com/vitest-dev/vitest/commit/64502a2c4)
- **coverage**:
- Invalidate circular modules correctly on rerun with coverage - by [@​aicest](https://github.com/aicest) in [#​9096](https://github.com/vitest-dev/vitest/issues/9096) [<samp>(6f22c)</samp>](https://github.com/vitest-dev/vitest/commit/6f22c675f)
- **expect**:
- Allow function as standard schema - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9099](https://github.com/vitest-dev/vitest/issues/9099) [<samp>(ed8a2)</samp>](https://github.com/vitest-dev/vitest/commit/ed8a2ebbd)
- **jsdom**:
- Reuse abort signals if possible - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9090](https://github.com/vitest-dev/vitest/issues/9090) [<samp>(2c468)</samp>](https://github.com/vitest-dev/vitest/commit/2c468ee95)
- **pool**:
- Init `VITEST_POOL_ID` + `VITEST_WORKER_ID` before environment setup - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9085](https://github.com/vitest-dev/vitest/issues/9085) [<samp>(37918)</samp>](https://github.com/vitest-dev/vitest/commit/379185b40)
- **web-worker**:
- `postMessage` to send ports to workers - by [@​whitphx](https://github.com/whitphx) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9078](https://github.com/vitest-dev/vitest/issues/9078) [<samp>(9d176)</samp>](https://github.com/vitest-dev/vitest/commit/9d1763d11)
##### 🏎 Performance
- Replace `debug` with `obug` - by [@​sxzz](https://github.com/sxzz) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9057](https://github.com/vitest-dev/vitest/issues/9057) [<samp>(acc51)</samp>](https://github.com/vitest-dev/vitest/commit/acc5152b9)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.13...v4.0.14)
### [`v4.0.13`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.13)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.12...v4.0.13)
##### 🐞 Bug Fixes
- **types**:
- Don't use type from Vite 7.1 - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9071](https://github.com/vitest-dev/vitest/issues/9071) [<samp>(6356b)</samp>](https://github.com/vitest-dev/vitest/commit/6356b1d38)
- Don't import node.js dependent types in vitest/browser - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9068](https://github.com/vitest-dev/vitest/issues/9068) [<samp>(332af)</samp>](https://github.com/vitest-dev/vitest/commit/332afa0de)
##### 🏎 Performance
- Avoid fetchModule roundtrip if the module is cached - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9075](https://github.com/vitest-dev/vitest/issues/9075) [<samp>(b27e0)</samp>](https://github.com/vitest-dev/vitest/commit/b27e002e5)
- **experimental**: If `fsCacheModule` is enabled, read from the memory when possible - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9076](https://github.com/vitest-dev/vitest/issues/9076) [<samp>(6b9a1)</samp>](https://github.com/vitest-dev/vitest/commit/6b9a1b5b1)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.12...v4.0.13)
### [`v4.0.12`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.12)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.11...v4.0.12)
##### 🐞 Bug Fixes
- Inherit `fsModuleCachePath` by default - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9063](https://github.com/vitest-dev/vitest/issues/9063) [<samp>(9a8bc)</samp>](https://github.com/vitest-dev/vitest/commit/9a8bc78c5)
- Don't import from `@opentelemetry/api` in public types - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9066](https://github.com/vitest-dev/vitest/issues/9066) [<samp>(e944a)</samp>](https://github.com/vitest-dev/vitest/commit/e944a37b7)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.11...v4.0.12)
### [`v4.0.11`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.11)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.10...v4.0.11)
##### 🚀 Experimental Features
- **api**: Add extensible test artifact API - by [@​macarie](https://github.com/macarie) in [#​8987](https://github.com/vitest-dev/vitest/issues/8987) [<samp>(77292)</samp>](https://github.com/vitest-dev/vitest/commit/772923645)
- See more at <https://vitest.dev/api/advanced/artifacts>
- **expect**: Provide `task` in `MatchState` - by [@​macarie](https://github.com/macarie) in [#​9022](https://github.com/vitest-dev/vitest/issues/9022) [<samp>(afd1f)</samp>](https://github.com/vitest-dev/vitest/commit/afd1f3e52)
- **experimental**: Support OpenTelemetry traces - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8994](https://github.com/vitest-dev/vitest/issues/8994) [<samp>(d6d33)</samp>](https://github.com/vitest-dev/vitest/commit/d6d3359dd)
- See more at <https://vitest.dev/guide/open-telemetry>
##### 🏎 Performance
- **experimental**: Add file system cache - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9026](https://github.com/vitest-dev/vitest/issues/9026) [<samp>(1b147)</samp>](https://github.com/vitest-dev/vitest/commit/1b1473712)
- See more at <https://vitest.dev/config/experimental#experimental-fsmodulecache>
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.10...v4.0.11)
### [`v4.0.10`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.10)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.9...v4.0.10)
##### 🐞 Bug Fixes
- Remove `onCancel` when worker is terminated - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9033](https://github.com/vitest-dev/vitest/issues/9033) [<samp>(6d7f0)</samp>](https://github.com/vitest-dev/vitest/commit/6d7f0a99e)
- **browser**:
- Don't scale the iframe if UI is disabled - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9018](https://github.com/vitest-dev/vitest/issues/9018) [<samp>(5406e)</samp>](https://github.com/vitest-dev/vitest/commit/5406e8ea4)
- Handle dependency stack traces with external source maps. Resolves: [#​9003](https://github.com/vitest-dev/vitest/issues/9003) - by [@​iclectic](https://github.com/iclectic) in [#​9016](https://github.com/vitest-dev/vitest/issues/9016) and [#​9003](https://github.com/vitest-dev/vitest/issues/9003) [<samp>(57ae5)</samp>](https://github.com/vitest-dev/vitest/commit/57ae547de)
- **bun**:
- Parsing of stack trace for bun runtime - by [@​nazarhussain](https://github.com/nazarhussain) in [#​9032](https://github.com/vitest-dev/vitest/issues/9032) [<samp>(f3ec6)</samp>](https://github.com/vitest-dev/vitest/commit/f3ec6fcb0)
- **core**:
- Prevent starting new run when cancelling - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8991](https://github.com/vitest-dev/vitest/issues/8991) [<samp>(eb98d)</samp>](https://github.com/vitest-dev/vitest/commit/eb98dd8fd)
- **pool**:
- Prevent writing to closed worker - by [@​AriPerkkio](https://github.com/AriPerkkio) and [@​sheremet-va](https://github.com/sheremet-va) in [#​9023](https://github.com/vitest-dev/vitest/issues/9023) [<samp>(042c6)</samp>](https://github.com/vitest-dev/vitest/commit/042c60c80)
- **reporters**:
- Report correct test run duration at the end - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8969](https://github.com/vitest-dev/vitest/issues/8969) [<samp>(bc3a6)</samp>](https://github.com/vitest-dev/vitest/commit/bc3a6921e)
- **ui**:
- Use execution time from ws reporter (`onFinished`) - by [@​userquin](https://github.com/userquin) in [#​8975](https://github.com/vitest-dev/vitest/issues/8975) [<samp>(f56dc)</samp>](https://github.com/vitest-dev/vitest/commit/f56dc0cc4)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.9...v4.0.10)
### [`v4.0.9`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.9)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.8...v4.0.9)
##### 🚀 Experimental Features
- **expect**: Add Set support to toBeOneOf - by [@​tim-we](https://github.com/tim-we) and [@​sheremet-va](https://github.com/sheremet-va) in [#​8906](https://github.com/vitest-dev/vitest/issues/8906) [<samp>(a415d)</samp>](https://github.com/vitest-dev/vitest/commit/a415d0375)
##### 🐞 Bug Fixes
- **browser**: Add favicon icons to the browser mode ui - by [@​userquin](https://github.com/userquin) in [#​8972](https://github.com/vitest-dev/vitest/issues/8972) [<samp>(353ee)</samp>](https://github.com/vitest-dev/vitest/commit/353ee5bbc)
- **forks**: Increase worker start timeout - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9027](https://github.com/vitest-dev/vitest/issues/9027) [<samp>(5e750)</samp>](https://github.com/vitest-dev/vitest/commit/5e750f4ba)
- **jsdom**: Cloned request is an instance of `Request` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8985](https://github.com/vitest-dev/vitest/issues/8985) [<samp>(506a9)</samp>](https://github.com/vitest-dev/vitest/commit/506a9fd0f)
- **ui**: Collect file/suite/test duration correctly - by [@​userquin](https://github.com/userquin) in [#​8976](https://github.com/vitest-dev/vitest/issues/8976) [<samp>(8016d)</samp>](https://github.com/vitest-dev/vitest/commit/8016da886)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.8...v4.0.9)
### [`v4.0.8`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.8)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.7...v4.0.8)
##### 🐞 Bug Fixes
- Workaround `noExternal` merging bug on Vite 6 - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​8950](https://github.com/vitest-dev/vitest/issues/8950) [<samp>(bcb13)</samp>](https://github.com/vitest-dev/vitest/commit/bcb132fd4)
- Missed context.d.ts file - by [@​termorey](https://github.com/termorey) in [#​8965](https://github.com/vitest-dev/vitest/issues/8965) [<samp>(9044d)</samp>](https://github.com/vitest-dev/vitest/commit/9044d9356)
- Incorrect error message for non-awaited `expect.element()` - by [@​StyleShit](https://github.com/StyleShit) in [#​8954](https://github.com/vitest-dev/vitest/issues/8954) [<samp>(9638d)</samp>](https://github.com/vitest-dev/vitest/commit/9638db0f3)
- **browser**: Cleanup frame-ancestors from CSP header at coverage middleware - by [@​userquin](https://github.com/userquin) in [#​8941](https://github.com/vitest-dev/vitest/issues/8941) [<samp>(1f730)</samp>](https://github.com/vitest-dev/vitest/commit/1f7303738)
- **deps**: Update all non-major dependencies - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8636](https://github.com/vitest-dev/vitest/issues/8636) [<samp>(da8b9)</samp>](https://github.com/vitest-dev/vitest/commit/da8b93aa5)
- **forks**: Do not fail with Windows Defender enabled - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8967](https://github.com/vitest-dev/vitest/issues/8967) [<samp>(c79f4)</samp>](https://github.com/vitest-dev/vitest/commit/c79f47c65)
- **runner**: Properly encode Uint8Array body in annotations - by [@​Livan-pro](https://github.com/Livan-pro) in [#​8951](https://github.com/vitest-dev/vitest/issues/8951) [<samp>(997ca)</samp>](https://github.com/vitest-dev/vitest/commit/997ca5a82)
- **spy**: Copy static properties if spy is initialised with `vi.fn()`, fix types for `vi.spyOn(obj, class)` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8956](https://github.com/vitest-dev/vitest/issues/8956) [<samp>(75e7f)</samp>](https://github.com/vitest-dev/vitest/commit/75e7fcc51)
- **webdriverio**: When no argument is passed to the .click interaction command, the webdriver command should also have no argument - by [@​julienw](https://github.com/julienw) in [#​8937](https://github.com/vitest-dev/vitest/issues/8937) [<samp>(069e6)</samp>](https://github.com/vitest-dev/vitest/commit/069e6db9b)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.7...v4.0.8)
### [`v4.0.7`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.7)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.6...v4.0.7)
##### 🐞 Bug Fixes
- Bind `process` in case global is overwritten - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8916](https://github.com/vitest-dev/vitest/issues/8916) [<samp>(6240d)</samp>](https://github.com/vitest-dev/vitest/commit/6240d51a6)
- Create environment once per worker with `isolate: false` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8915](https://github.com/vitest-dev/vitest/issues/8915) [<samp>(c9078)</samp>](https://github.com/vitest-dev/vitest/commit/c9078a26e)
- Add Locator as a possible element type in `toContainElement()` matcher - by [@​vitalybaev](https://github.com/vitalybaev) in [#​8910](https://github.com/vitest-dev/vitest/issues/8910) and [#​8927](https://github.com/vitest-dev/vitest/issues/8927) [<samp>(35a27)</samp>](https://github.com/vitest-dev/vitest/commit/35a27d4b3)
- **browser**: Inherit `isolate` option, deprecate `browser.isolate`/`browser.fileParallelism` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8890](https://github.com/vitest-dev/vitest/issues/8890) [<samp>(9d2b4)</samp>](https://github.com/vitest-dev/vitest/commit/9d2b4d501)
- **cli**: Parse `--execArgv` as array - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8924](https://github.com/vitest-dev/vitest/issues/8924) [<samp>(751c3)</samp>](https://github.com/vitest-dev/vitest/commit/751c3926f)
- **jsdom**: Support `URL.createObjectURL`, `FormData.set(prop, blob)` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8935](https://github.com/vitest-dev/vitest/issues/8935) [<samp>(a1b73)</samp>](https://github.com/vitest-dev/vitest/commit/a1b7361ab)
- **pool**: Avoid `--require` argument when running in deno - by [@​pi0](https://github.com/pi0) in [#​8897](https://github.com/vitest-dev/vitest/issues/8897) [<samp>(d41fa)</samp>](https://github.com/vitest-dev/vitest/commit/d41fa742f)
- **typecheck**: Handle re-runs outside `tsc` - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8920](https://github.com/vitest-dev/vitest/issues/8920) [<samp>(fdb2e)</samp>](https://github.com/vitest-dev/vitest/commit/fdb2e7982)
##### 🏎 Performance
- **pool**:
- Sort test files by project by default - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8914](https://github.com/vitest-dev/vitest/issues/8914) [<samp>(680a6)</samp>](https://github.com/vitest-dev/vitest/commit/680a612ea)
- **reporters**:
- Optimize getting the tests stats - by [@​Connormiha](https://github.com/Connormiha) in [#​8908](https://github.com/vitest-dev/vitest/issues/8908) [<samp>(06d62)</samp>](https://github.com/vitest-dev/vitest/commit/06d6207fb)
- Remove unnecessary `Array.from` call - by [@​Connormiha](https://github.com/Connormiha) in [#​8907](https://github.com/vitest-dev/vitest/issues/8907) [<samp>(b6014)</samp>](https://github.com/vitest-dev/vitest/commit/b60149b27)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.6...v4.0.7)
### [`v4.0.6`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.6)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.5...v4.0.6)
##### 🐞 Bug Fixes
- Don't merge errors with different diffs for reporting - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​8871](https://github.com/vitest-dev/vitest/issues/8871) [<samp>(3e19f)</samp>](https://github.com/vitest-dev/vitest/commit/3e19f27d0)
- Do not throw when importing a type from an external package - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8875](https://github.com/vitest-dev/vitest/issues/8875) [<samp>(7e6c3)</samp>](https://github.com/vitest-dev/vitest/commit/7e6c37ae5)
- Improve spying types - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8878](https://github.com/vitest-dev/vitest/issues/8878) [<samp>(ca041)</samp>](https://github.com/vitest-dev/vitest/commit/ca041f51a)
- Reuse the same environment when `isolate` and `fileParallelism` are false - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8889](https://github.com/vitest-dev/vitest/issues/8889) [<samp>(31706)</samp>](https://github.com/vitest-dev/vitest/commit/31706dfe5)
- **browser**:
- Support module tracking - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8877](https://github.com/vitest-dev/vitest/issues/8877) [<samp>(9e24a)</samp>](https://github.com/vitest-dev/vitest/commit/9e24a59f2)
- Ensure setup files are re-evaluated on each test run - by [@​yjaaidi](https://github.com/yjaaidi) in [#​8883](https://github.com/vitest-dev/vitest/issues/8883) and [#​8884](https://github.com/vitest-dev/vitest/issues/8884) [<samp>(f50ea)</samp>](https://github.com/vitest-dev/vitest/commit/f50ea7a25)
- **coverage**:
- Prevent filtering out virtual files before remapping to sources - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8860](https://github.com/vitest-dev/vitest/issues/8860) [<samp>(e3b77)</samp>](https://github.com/vitest-dev/vitest/commit/e3b777550)
- **happy-dom**:
- Properly teardown additional keys - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8888](https://github.com/vitest-dev/vitest/issues/8888) [<samp>(10a06)</samp>](https://github.com/vitest-dev/vitest/commit/10a06d8c9)
- **jsdom**:
- Pass down Node.js `FormData` to `Request` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8880](https://github.com/vitest-dev/vitest/issues/8880) [<samp>(197ca)</samp>](https://github.com/vitest-dev/vitest/commit/197caf2f9)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.5...v4.0.6)
### [`v4.0.5`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.5)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.4...v4.0.5)
##### 🐞 Bug Fixes
- Respect `ssr.noExternal` when externalizing dependencies, fix Svelte and Astro - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8862](https://github.com/vitest-dev/vitest/issues/8862) [<samp>(a4f86)</samp>](https://github.com/vitest-dev/vitest/commit/a4f86f1ba)
- Allow module in --config - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8864](https://github.com/vitest-dev/vitest/issues/8864) [<samp>(b9521)</samp>](https://github.com/vitest-dev/vitest/commit/b9521e0c2)
- **browser**: Allow `Locator` type in selectOptions element parameter - by [@​rzzf](https://github.com/rzzf) and [@​sheremet-va](https://github.com/sheremet-va) in [#​8848](https://github.com/vitest-dev/vitest/issues/8848) [<samp>(7ee28)</samp>](https://github.com/vitest-dev/vitest/commit/7ee283c96)
- **module-runner**: Don't return node builtins for `getBuiltins` unconditionally - by [@​sapphi-red](https://github.com/sapphi-red) in [#​8863](https://github.com/vitest-dev/vitest/issues/8863) [<samp>(0e858)</samp>](https://github.com/vitest-dev/vitest/commit/0e858bab4)
- **pool**: Rename `groupId` to `groupOrder` in error message - by [@​Yohannfra](https://github.com/Yohannfra) in [#​8856](https://github.com/vitest-dev/vitest/issues/8856) [<samp>(b9aab)</samp>](https://github.com/vitest-dev/vitest/commit/b9aabf4e6)
##### 🏎 Performance
- Pass testfiles at once when `--no-isolate --maxWorkers=1` - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8835](https://github.com/vitest-dev/vitest/issues/8835) [<samp>(584aa)</samp>](https://github.com/vitest-dev/vitest/commit/584aa7148)
- **expect**: Optimize checking the input type - by [@​Connormiha](https://github.com/Connormiha) in [#​8840](https://github.com/vitest-dev/vitest/issues/8840) [<samp>(06968)</samp>](https://github.com/vitest-dev/vitest/commit/0696898b4)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.4...v4.0.5)
### [`v4.0.4`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.4)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.3...v4.0.4)
##### 🐞 Bug Fixes
- **browser**:
- Correct typo - by [@​benmccann](https://github.com/benmccann) in [#​8796](https://github.com/vitest-dev/vitest/issues/8796) [<samp>(ede1f)</samp>](https://github.com/vitest-dev/vitest/commit/ede1f39d6)
- Publish a missing context file for webdriverio - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8824](https://github.com/vitest-dev/vitest/issues/8824) [<samp>(7c7b6)</samp>](https://github.com/vitest-dev/vitest/commit/7c7b6f0b1)
- **mocker**:
- Support mocking builtins without `node:` prefix - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8829](https://github.com/vitest-dev/vitest/issues/8829) [<samp>(06208)</samp>](https://github.com/vitest-dev/vitest/commit/06208d30b)
- **pool**:
- Runner's error listener causing `MaxListenersExceededWarning` - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8820](https://github.com/vitest-dev/vitest/issues/8820) [<samp>(d1bff)</samp>](https://github.com/vitest-dev/vitest/commit/d1bff3bb3)
- Capture workers `stdio` to logger - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8809](https://github.com/vitest-dev/vitest/issues/8809) [<samp>(fb95f)</samp>](https://github.com/vitest-dev/vitest/commit/fb95fc736)
- **spy**:
- Allow classes in `vi.mocked` utility - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8839](https://github.com/vitest-dev/vitest/issues/8839) [<samp>(f8756)</samp>](https://github.com/vitest-dev/vitest/commit/f87568d64)
- **worker**:
- Rpc listener leak when `isolate: false` - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8821](https://github.com/vitest-dev/vitest/issues/8821) [<samp>(573dc)</samp>](https://github.com/vitest-dev/vitest/commit/573dc06fe)
##### 🏎 Performance
- **utils**: Optimized reducer to avoid creating new objects - by [@​Connormiha](https://github.com/Connormiha) in [#​8818](https://github.com/vitest-dev/vitest/issues/8818) [<samp>(d19ce)</samp>](https://github.com/vitest-dev/vitest/commit/d19cece3a)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.3...v4.0.4)
### [`v4.0.3`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.3)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.2...v4.0.3)
##### 🐞 Bug Fixes
- Preserve reporter options from config when CLI reporters override them - by [@​Copilot](https://github.com/Copilot) and **sheremet-va** in [#​8794](https://github.com/vitest-dev/vitest/issues/8794) [<samp>(15552)</samp>](https://github.com/vitest-dev/vitest/commit/155521a85)
- **browser**: More stable in-source testing validation - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8793](https://github.com/vitest-dev/vitest/issues/8793) [<samp>(62297)</samp>](https://github.com/vitest-dev/vitest/commit/622977e61)
- **happy-dom**: Support fetch globals - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8791](https://github.com/vitest-dev/vitest/issues/8791) [<samp>(0fb74)</samp>](https://github.com/vitest-dev/vitest/commit/0fb74bd3b)
- **init**: Use correct jsx/tsx extension - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8792](https://github.com/vitest-dev/vitest/issues/8792) [<samp>(abc04)</samp>](https://github.com/vitest-dev/vitest/commit/abc046f95)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.2...v4.0.3)
### [`v4.0.2`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.2)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.1...v4.0.2)
##### 🐞 Bug Fixes
- **browser**:
- Don't print the deprecation notice in node\_modules - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8779](https://github.com/vitest-dev/vitest/issues/8779) [<samp>(588f7)</samp>](https://github.com/vitest-dev/vitest/commit/588f76858)
- **pool**:
- Assign envs before running tests to keep in sync with process.env - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8769](https://github.com/vitest-dev/vitest/issues/8769) [<samp>(26ce8)</samp>](https://github.com/vitest-dev/vitest/commit/26ce88db6)
- **spy**:
- Properly inherit implementation's `length` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8778](https://github.com/vitest-dev/vitest/issues/8778) [<samp>(d4c2b)</samp>](https://github.com/vitest-dev/vitest/commit/d4c2b280b)
- Reset spies if both `restoreMocks` and `mockReset` are set in the config - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8781](https://github.com/vitest-dev/vitest/issues/8781) [<samp>(2eedb)</samp>](https://github.com/vitest-dev/vitest/commit/2eedbce76)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.1...v4.0.2)
### [`v4.0.1`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.1)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.0...v4.0.1)
##### 🐞 Bug Fixes
- Move the `getBuiltins` check - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8765](https://github.com/vitest-dev/vitest/issues/8765) [<samp>(81000)</samp>](https://github.com/vitest-dev/vitest/commit/81000631d)
- **pool**: Don't teardown the communication channel too soon if something is running after the test - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8767](https://github.com/vitest-dev/vitest/issues/8767) [<samp>(3fae7)</samp>](https://github.com/vitest-dev/vitest/commit/3fae73e2e)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.0...v4.0.1)
### [`v4.0.0`](https://github.com/vitest-dev/vitest/releases/tag/v4.0.0)
[Compare Source](https://github.com/vitest-dev/vitest/compare/v3.2.7...v4.0.0)
Vitest 4.0 is out!
To stay updated, read our [blog post](https://vitest.dev/blog/vitest-4) and check the [migration guide](https://vitest.dev/guide/migration).
##### 🚨 Breaking Changes
- Remove `'basic'` reporter - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​7884](https://github.com/vitest-dev/vitest/issues/7884) [<samp>(82fcf)</samp>](https://github.com/vitest-dev/vitest/commit/82fcf5d53)
- Simplify default exclude pattern - by [@​sheremet-va](https://github.com/sheremet-va) in [#​6287](https://github.com/vitest-dev/vitest/issues/6287) [<samp>(14c50)</samp>](https://github.com/vitest-dev/vitest/commit/14c507200)
- Remove deprecated getSourceMap - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8194](https://github.com/vitest-dev/vitest/issues/8194) [<samp>(ff934)</samp>](https://github.com/vitest-dev/vitest/commit/ff93444f8)
- Replace deprecated ErrorWithDiff with TestError - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8195](https://github.com/vitest-dev/vitest/issues/8195) [<samp>(da59e)</samp>](https://github.com/vitest-dev/vitest/commit/da59eb887)
- Remove UserConfig type in favor of ViteUserConfig - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8196](https://github.com/vitest-dev/vitest/issues/8196) [<samp>(22f7f)</samp>](https://github.com/vitest-dev/vitest/commit/22f7f2db5)
- Remove deprecated coverage options in favor of `vitest/node` exports - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8197](https://github.com/vitest-dev/vitest/issues/8197) [<samp>(dc848)</samp>](https://github.com/vitest-dev/vitest/commit/dc8486d22)
- Remove deprecated internal helpers and environment exports - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8198](https://github.com/vitest-dev/vitest/issues/8198) [<samp>(4703c)</samp>](https://github.com/vitest-dev/vitest/commit/4703cf850)
- Remove deprecated typecheck and runner types - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8199](https://github.com/vitest-dev/vitest/issues/8199) [<samp>(89a1c)</samp>](https://github.com/vitest-dev/vitest/commit/89a1cb626)
- Remove Node types from the main entry point, use `vitest/node` instead - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8200](https://github.com/vitest-dev/vitest/issues/8200) [<samp>(1e60c)</samp>](https://github.com/vitest-dev/vitest/commit/1e60c4f44)
- Remove support for Vite 5 - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8202](https://github.com/vitest-dev/vitest/issues/8202) [<samp>(cb8b0)</samp>](https://github.com/vitest-dev/vitest/commit/cb8b03bac)
- Remove deprecated types - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8203](https://github.com/vitest-dev/vitest/issues/8203) [<samp>(66bee)</samp>](https://github.com/vitest-dev/vitest/commit/66bee836f)
- Remove deprecated environmentMatchGlobs and poolMatchGlobs - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8205](https://github.com/vitest-dev/vitest/issues/8205) [<samp>(be11d)</samp>](https://github.com/vitest-dev/vitest/commit/be11d374c)
- Remove deprecated `workspace` option in favor of `projects` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8218](https://github.com/vitest-dev/vitest/issues/8218) [<samp>(76fb7)</samp>](https://github.com/vitest-dev/vitest/commit/76fb75d42)
- Ignore `--standalone` when CLI filename filter is used - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8262](https://github.com/vitest-dev/vitest/issues/8262) [<samp>(013bf)</samp>](https://github.com/vitest-dev/vitest/commit/013bf2cb2)
- Use module-runner instead of vite-node - by [@​sheremet-va](https://github.com/sheremet-va) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8208](https://github.com/vitest-dev/vitest/issues/8208) [<samp>(9be01)</samp>](https://github.com/vitest-dev/vitest/commit/9be01ba59)
- Rewrite spying implementation to make module mocking more intuitive - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8363](https://github.com/vitest-dev/vitest/issues/8363) [<samp>(9e412)</samp>](https://github.com/vitest-dev/vitest/commit/9e412de35)
- Remove deprecated APIs - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8428](https://github.com/vitest-dev/vitest/issues/8428) [<samp>(a1cb9)</samp>](https://github.com/vitest-dev/vitest/commit/a1cb9719a)
- Remove `minWorkers` and set it automatically to 0 in non watch mode - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8454](https://github.com/vitest-dev/vitest/issues/8454) [<samp>(2c2d1)</samp>](https://github.com/vitest-dev/vitest/commit/2c2d1d4ce)
- Verbose reporter prints tests in a list, introduce `tree` reporter - by [@​sheremet-va](https://github.com/sheremet-va) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8500](https://github.com/vitest-dev/vitest/issues/8500) [<samp>(25fd3)</samp>](https://github.com/vitest-dev/vitest/commit/25fd32bf0)
- Include shadow root contents in pretty-format output - by [@​wkillerud](https://github.com/wkillerud) in [#​8545](https://github.com/vitest-dev/vitest/issues/8545) [<samp>(9e722)</samp>](https://github.com/vitest-dev/vitest/commit/9e722834a)
- Remove deprecated order from test() API - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8594](https://github.com/vitest-dev/vitest/issues/8594) [<samp>(4d419)</samp>](https://github.com/vitest-dev/vitest/commit/4d41928c6)
- Rewrite pools without `tinypool` - by [@​AriPerkkio](https://github.com/AriPerkkio) and [@​sheremet-va](https://github.com/sheremet-va) in [#​8705](https://github.com/vitest-dev/vitest/issues/8705) [<samp>(4822d)</samp>](https://github.com/vitest-dev/vitest/commit/4822d047a)
- **browser**: Require a provider factory instead of a string - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8445](https://github.com/vitest-dev/vitest/issues/8445) [<samp>(606cb)</samp>](https://github.com/vitest-dev/vitest/commit/606cb9e3e)
- **expect**: Pass current equality testers to asymmetric matcher - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​6825](https://github.com/vitest-dev/vitest/issues/6825) [<samp>(965ce)</samp>](https://github.com/vitest-dev/vitest/commit/965cefc19)
- **projects**: Allow only files that have "vitest.config" or "vite.config" in the name - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8542](https://github.com/vitest-dev/vitest/issues/8542) [<samp>(304bc)</samp>](https://github.com/vitest-dev/vitest/commit/304bc20f0)
- **reporter**: Remove deprecated APIs - by [@​AriPerkkio](https://github.com/AriPerkkio) and [@​sheremet-va](https://github.com/sheremet-va) in [#​8223](https://github.com/vitest-dev/vitest/issues/8223) [<samp>(149f8)</samp>](https://github.com/vitest-dev/vitest/commit/149f8e509)
- **runner**: Set mode to `todo` if no function is passed down to `test` or `describe` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8346](https://github.com/vitest-dev/vitest/issues/8346) [<samp>(1a81c)</samp>](https://github.com/vitest-dev/vitest/commit/1a81c21d2)
- **snapshot**: Fail test with obsolete snapshot on CI - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​7963](https://github.com/vitest-dev/vitest/issues/7963) [<samp>(4d84f)</samp>](https://github.com/vitest-dev/vitest/commit/4d84f0ac6)
- **spy**: Support spying on classes - by [@​sheremet-va](https://github.com/sheremet-va) in [#​6160](https://github.com/vitest-dev/vitest/issues/6160) [<samp>(abc0d)</samp>](https://github.com/vitest-dev/vitest/commit/abc0d8273)
##### 🚀 Features
- Provide entity to onConsoleLog - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8159](https://github.com/vitest-dev/vitest/issues/8159) [<samp>(437d4)</samp>](https://github.com/vitest-dev/vitest/commit/437d461aa)
- Add `onUnhandledError` callback - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8162](https://github.com/vitest-dev/vitest/issues/8162) [<samp>(924cb)</samp>](https://github.com/vitest-dev/vitest/commit/924cb6961)
- Add spy option to vi.mockObject - by [@​rChaoz](https://github.com/rChaoz) in [#​8285](https://github.com/vitest-dev/vitest/issues/8285) [<samp>(81d76)</samp>](https://github.com/vitest-dev/vitest/commit/81d7601e4)
- Don't use vite-node in coverage packages - by [@​sheremet-va](https://github.com/sheremet-va) [<samp>(ffdb4)</samp>](https://github.com/vitest-dev/vitest/commit/ffdb4d5fd)
- Clickable dashboard numbers - by [@​shairez](https://github.com/shairez) in [#​7406](https://github.com/vitest-dev/vitest/issues/7406) [<samp>(2344c)</samp>](https://github.com/vitest-dev/vitest/commit/2344c1f6e)
- Display test "path" when filtering - by [@​userquin](https://github.com/userquin) in [#​8547](https://github.com/vitest-dev/vitest/issues/8547) [<samp>(2e491)</samp>](https://github.com/vitest-dev/vitest/commit/2e4918954)
- Introduce separate packages for browser mode providers - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8629](https://github.com/vitest-dev/vitest/issues/8629) [<samp>(0dc93)</samp>](https://github.com/vitest-dev/vitest/commit/0dc93ea98)
- Add hooks with type-safe extra context to TestAPI - by [@​ysfaran](https://github.com/ysfaran) in [#​8623](https://github.com/vitest-dev/vitest/issues/8623) [<samp>(6b21c)</samp>](https://github.com/vitest-dev/vitest/commit/6b21cfe55)
- Support `expect.assert` for type narrowing - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8695](https://github.com/vitest-dev/vitest/issues/8695) [<samp>(fe589)</samp>](https://github.com/vitest-dev/vitest/commit/fe5895d2b)
- Add `displayAnnotations` option to `github-options` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8706](https://github.com/vitest-dev/vitest/issues/8706) [<samp>(4a66d)</samp>](https://github.com/vitest-dev/vitest/commit/4a66df625)
- Add schema validation matchers - by [@​zirkelc](https://github.com/zirkelc) in [#​8527](https://github.com/vitest-dev/vitest/issues/8527) [<samp>(c0b25)</samp>](https://github.com/vitest-dev/vitest/commit/c0b250e5c)
- Add a way to dump transformed content - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8711](https://github.com/vitest-dev/vitest/issues/8711) [<samp>(931c0)</samp>](https://github.com/vitest-dev/vitest/commit/931c0ee63)
- **api**:
- Expose `experimental_parseSpecifications` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8408](https://github.com/vitest-dev/vitest/issues/8408) [<samp>(fdeb2)</samp>](https://github.com/vitest-dev/vitest/commit/fdeb2f482)
- Expose Vitest watcher - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8413](https://github.com/vitest-dev/vitest/issues/8413) [<samp>(aaa6e)</samp>](https://github.com/vitest-dev/vitest/commit/aaa6e6512)
- Add `enableCoverage` and `disableCoverage` methods - by [@​sheremet-va](https://github.com/sheremet-va) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8412](https://github.com/vitest-dev/vitest/issues/8412) [<samp>(61eb7)</samp>](https://github.com/vitest-dev/vitest/commit/61eb7dd9c)
- Add `getGlobalTestNamePattern` method - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8438](https://github.com/vitest-dev/vitest/issues/8438) [<samp>(bdb70)</samp>](https://github.com/vitest-dev/vitest/commit/bdb7067f1)
- Add `relativeModuleId` to `TestModule` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8505](https://github.com/vitest-dev/vitest/issues/8505) [<samp>(3be09)</samp>](https://github.com/vitest-dev/vitest/commit/3be0986aa)
- Add `getSeed` method - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8592](https://github.com/vitest-dev/vitest/issues/8592) [<samp>(438c4)</samp>](https://github.com/vitest-dev/vitest/commit/438c44e7f)
- **browser**:
- Support `toBeInViewport` utility method to assert element is in viewport or not - by [@​Shinyaigeek](https://github.com/Shinyaigeek) in [#​8234](https://github.com/vitest-dev/vitest/issues/8234) [<samp>(ceed5)</samp>](https://github.com/vitest-dev/vitest/commit/ceed5b622)
- Add qwik to the `vitest init` cli command - by [@​thejackshelton](https://github.com/thejackshelton) in [#​8330](https://github.com/vitest-dev/vitest/issues/8330) [<samp>(1638b)</samp>](https://github.com/vitest-dev/vitest/commit/1638b44e8)
- Introduce `toMatchScreenshot` for Visual Regression Testing - by [@​macarie](https://github.com/macarie) in [#​8041](https://github.com/vitest-dev/vitest/issues/8041) [<samp>(d45f9)</samp>](https://github.com/vitest-dev/vitest/commit/d45f964c1)
- Add `trackUnhandledErrors` option - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8386](https://github.com/vitest-dev/vitest/issues/8386) [<samp>(c0ec0)</samp>](https://github.com/vitest-dev/vitest/commit/c0ec08a90)
- Support iframe locator with playwright provider - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8016](https://github.com/vitest-dev/vitest/issues/8016) [<samp>(57b2c)</samp>](https://github.com/vitest-dev/vitest/commit/57b2cca2e)
- Add `length` property to locators, `toHaveLength` now accepts locators - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8512](https://github.com/vitest-dev/vitest/issues/8512) [<samp>(2308c)</samp>](https://github.com/vitest-dev/vitest/commit/2308cbf13)
- Support playwright tracing - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8584](https://github.com/vitest-dev/vitest/issues/8584) [<samp>(1aac5)</samp>](https://github.com/vitest-dev/vitest/commit/1aac59cd2)
- Expose `options` on `BrowserProviderOption` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8609](https://github.com/vitest-dev/vitest/issues/8609) [<samp>(0d0e5)</samp>](https://github.com/vitest-dev/vitest/commit/0d0e5cdf6)
- Support `--inspect` option in webdriverio - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8613](https://github.com/vitest-dev/vitest/issues/8613) [<samp>(38adc)</samp>](https://github.com/vitest-dev/vitest/commit/38adc86cf)
- Support custom screenshot comparison algorithms - by [@​macarie](https://github.com/macarie) in [#​8687](https://github.com/vitest-dev/vitest/issues/8687) [<samp>(e63b1)</samp>](https://github.com/vitest-dev/vitest/commit/e63b17efc)
- **coverage**:
- `autoUpdate` to support percentage formatting - by [@​Battjmo](https://github.com/Battjmo) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8456](https://github.com/vitest-dev/vitest/issues/8456) [<samp>(99e01)</samp>](https://github.com/vitest-dev/vitest/commit/99e016bec)
- **expect**:
- Support `toBeNullable` expect function to check provided value is nullish - by [@​Shinyaigeek](https://github.com/Shinyaigeek) and [@​sheremet-va](https://github.com/sheremet-va) in [#​8294](https://github.com/vitest-dev/vitest/issues/8294) [<samp>(eeec5)</samp>](https://github.com/vitest-dev/vitest/commit/eeec501de)
- **mocker**:
- Add `automocker` entry - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8301](https://github.com/vitest-dev/vitest/issues/8301) [<samp>(e9c92)</samp>](https://github.com/vitest-dev/vitest/commit/e9c928252)
##### 🐞 Bug Fixes
- Allow overriding globals in types - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8215](https://github.com/vitest-dev/vitest/issues/8215) [<samp>(2248b)</samp>](https://github.com/vitest-dev/vitest/commit/2248b06d4)
- Remove unused dependencies - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8184](https://github.com/vitest-dev/vitest/issues/8184) [<samp>(feadc)</samp>](https://github.com/vitest-dev/vitest/commit/feadc60af)
- Distribute test files to shards more evenly - by [@​Shinyaigeek](https://github.com/Shinyaigeek) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8288](https://github.com/vitest-dev/vitest/issues/8288) [<samp>(7b489)</samp>](https://github.com/vitest-dev/vitest/commit/7b489959a)
- Use suite's timeout when `test.extend` - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8278](https://github.com/vitest-dev/vitest/issues/8278) [<samp>(43977)</samp>](https://github.com/vitest-dev/vitest/commit/43977c2b8)
- Support snapshot with no object key sorting - by [@​hi-ogawa](https://github.com/hi-ogawa) and [@​sheremet-va](https://github.com/sheremet-va) in [#​8136](https://github.com/vitest-dev/vitest/issues/8136) [<samp>(e85e3)</samp>](https://github.com/vitest-dev/vitest/commit/e85e396f0)
- Annotation location always points to the test file - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8315](https://github.com/vitest-dev/vitest/issues/8315) [<samp>(88071)</samp>](https://github.com/vitest-dev/vitest/commit/88071a8f2)
- Add `--changed` flag support to `vitest list` command - by [@​haakonjackfloat](https://github.com/haakonjackfloat) in [#​8270](https://github.com/vitest-dev/vitest/issues/8270) and [#​8272](https://github.com/vitest-dev/vitest/issues/8272) [<samp>(e71a5)</samp>](https://github.com/vitest-dev/vitest/commit/e71a5d0ec)
- Prevent rpc timeout on slow thread blocking synchronous methods - by [@​AriPerkkio](https://github.com/AriPerkkio) and [@​sheremet-va](https://github.com/sheremet-va) in [#​8297](https://github.com/vitest-dev/vitest/issues/8297) [<samp>(bea87)</samp>](https://github.com/vitest-dev/vitest/commit/bea874610)
- Forbid setting environment to `browser` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8334](https://github.com/vitest-dev/vitest/issues/8334) [<samp>(0417a)</samp>](https://github.com/vitest-dev/vitest/commit/0417a2c1a)
- Invalidate modules in all module graphs when the file is changed - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8352](https://github.com/vitest-dev/vitest/issues/8352) [<samp>(94ab3)</samp>](https://github.com/vitest-dev/vitest/commit/94ab392b3)
- Screenshot masks with Playwright provider - by [@​macarie](https://github.com/macarie) in [#​8357](https://github.com/vitest-dev/vitest/issues/8357) [<samp>(459ef)</samp>](https://github.com/vitest-dev/vitest/commit/459efba6b)
- Configure `oxc` instead of `esbuild` on `rolldown-vite` - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​8378](https://github.com/vitest-dev/vitest/issues/8378) [<samp>(e922e)</samp>](https://github.com/vitest-dev/vitest/commit/e922e9266)
- Make sure test errors always have `stacks` property in Node.js context - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8392](https://github.com/vitest-dev/vitest/issues/8392) [<samp>(b825e)</samp>](https://github.com/vitest-dev/vitest/commit/b825ef87c)
- Support `import.meta.resolve` on Vite 7 - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​8493](https://github.com/vitest-dev/vitest/issues/8493) [<samp>(549d3)</samp>](https://github.com/vitest-dev/vitest/commit/549d321e2)
- Show the assertion error first when `expect.poll` assertion fails - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8483](https://github.com/vitest-dev/vitest/issues/8483) [<samp>(fb450)</samp>](https://github.com/vitest-dev/vitest/commit/fb4500bec)
- Override fake timers when `useFakeTimers` is called multiple times - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8504](https://github.com/vitest-dev/vitest/issues/8504) [<samp>(ed7e3)</samp>](https://github.com/vitest-dev/vitest/commit/ed7e3ad5d)
- Custom expect messages for `expect.extend` matchers - by [@​lzl0304](https://github.com/lzl0304) in [#​8520](https://github.com/vitest-dev/vitest/issues/8520) [<samp>(96945)</samp>](https://github.com/vitest-dev/vitest/commit/969456b4a)
- Process sourcemaps for stack traces from `globalSetup` files - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8534](https://github.com/vitest-dev/vitest/issues/8534) [<samp>(8978a)</samp>](https://github.com/vitest-dev/vitest/commit/8978a23b7)
- Resolve performance issue when throwing errors with stackTraceLimit = 0 - by [@​Copilot](https://github.com/Copilot), **sheremet-va** and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8531](https://github.com/vitest-dev/vitest/issues/8531) [<samp>(6d5b5)</samp>](https://github.com/vitest-dev/vitest/commit/6d5b5b1a5)
- Avoid recursively applying `$` and `%` formatting to `test.for/each` title - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​8557](https://github.com/vitest-dev/vitest/issues/8557) [<samp>(ea6d7)</samp>](https://github.com/vitest-dev/vitest/commit/ea6d7322e)
- Replace wildcard exports `"./*"` with specific files in vitest package - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​8560](https://github.com/vitest-dev/vitest/issues/8560) [<samp>(ce746)</samp>](https://github.com/vitest-dev/vitest/commit/ce7466408)
- Don't publish unused d.ts files - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8562](https://github.com/vitest-dev/vitest/issues/8562) [<samp>(42dfd)</samp>](https://github.com/vitest-dev/vitest/commit/42dfd1c43)
- Remove loupe dependencies from `optimizeDeps.include` for browser mode - by [@​jake-danton](https://github.com/jake-danton) in [#​8570](https://github.com/vitest-dev/vitest/issues/8570) [<samp>(cdcf7)</samp>](https://github.com/vitest-dev/vitest/commit/cdcf7e854)
- Update `engines` field to drop Node 18 support - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8608](https://github.com/vitest-dev/vitest/issues/8608) [<samp>(9a0bf)</samp>](https://github.com/vitest-dev/vitest/commit/9a0bf2254)
- Correctly inherit test options on extended tests - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8618](https://github.com/vitest-dev/vitest/issues/8618) [<samp>(15c09)</samp>](https://github.com/vitest-dev/vitest/commit/15c091a99)
- Update [@​types/node](https://github.com/types/node) peer deps - by [@​sheremet-va](https://github.com/sheremet-va) [<samp>(ee6b2)</samp>](https://github.com/vitest-dev/vitest/commit/ee6b27b5f)
- Re-export CDP Session directly from playwright - by [@​mrginglymus](https://github.com/mrginglymus) in [#​8702](https://github.com/vitest-dev/vitest/issues/8702) [<samp>(9553a)</samp>](https://github.com/vitest-dev/vitest/commit/9553ab923)
- Disable trackUnhandledErrors if inspector is enabled - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8732](https://github.com/vitest-dev/vitest/issues/8732) [<samp>(acac7)</samp>](https://github.com/vitest-dev/vitest/commit/acac7104d)
- `base` option doesn't crash vitest - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8760](https://github.com/vitest-dev/vitest/issues/8760) [<samp>(9f0ec)</samp>](https://github.com/vitest-dev/vitest/commit/9f0ecccb8)
- **browser**:
- Run in-source tests only when the file itsels is a test file - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8204](https://github.com/vitest-dev/vitest/issues/8204) [<samp>(bdd2e)</samp>](https://github.com/vitest-dev/vitest/commit/bdd2e01c3)
- `locator.element()` returns `HTMLElement` or `SVGElement` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8440](https://github.com/vitest-dev/vitest/issues/8440) [<samp>(c1ac1)</samp>](https://github.com/vitest-dev/vitest/commit/c1ac15c6b)
- Don't import from `vite` directly - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8541](https://github.com/vitest-dev/vitest/issues/8541) [<samp>(d7fca)</samp>](https://github.com/vitest-dev/vitest/commit/d7fca0389)
- Update expect.element type to match the implementation - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8597](https://github.com/vitest-dev/vitest/issues/8597) [<samp>(b2804)</samp>](https://github.com/vitest-dev/vitest/commit/b2804a1f9)
- Throw an error if iframe is not accessible anymore - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8601](https://github.com/vitest-dev/vitest/issues/8601) [<samp>(6acdc)</samp>](https://github.com/vitest-dev/vitest/commit/6acdc3a5e)
- Stop creating unnecessary directories when taking screenshots - by [@​macarie](https://github.com/macarie) in [#​8605](https://github.com/vitest-dev/vitest/issues/8605) [<samp>(b1c8f)</samp>](https://github.com/vitest-dev/vitest/commit/b1c8fdbe9)
- Always define commands - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8626](https://github.com/vitest-dev/vitest/issues/8626) [<samp>(acbe0)</samp>](https://github.com/vitest-dev/vitest/commit/acbe0e973)
- Exclude deprecated context import from optimization - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8658](https://github.com/vitest-dev/vitest/issues/8658) [<samp>(a96ea)</samp>](https://github.com/vitest-dev/vitest/commit/a96ea140e)
- Allow importing BrowserCommand if no browser package is installed - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8666](https://github.com/vitest-dev/vitest/issues/8666) [<samp>(95c36)</samp>](https://github.com/vitest-dev/vitest/commit/95c367f5e)
- Define an export for browser/utils - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8678](https://github.com/vitest-dev/vitest/issues/8678) [<samp>(529ab)</samp>](https://github.com/vitest-dev/vitest/commit/529ab46ac)
- Allow service workers to mock the network in chromium without breaking vi.mock - by [@​Georgegriff](https://github.com/Georgegriff) and [@​sheremet-va](https://github.com/sheremet-va) in [#​8668](https://github.com/vitest-dev/vitest/issues/8668) [<samp>(87108)</samp>](https://github.com/vitest-dev/vitest/commit/87108db33)
- Support sync `not.toBeInTheDocument()` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8751](https://github.com/vitest-dev/vitest/issues/8751) [<samp>(f5d06)</samp>](https://github.com/vitest-dev/vitest/commit/f5d06434f)
- **core**:
- Fix `objectContaining` expect utility to have more compatibility to jest's one - by [@​Shinyaigeek](https://github.com/Shinyaigeek) in [#​8241](https://github.com/vitest-dev/vitest/issues/8241) [<samp>(480be)</samp>](https://github.com/vitest-dev/vitest/commit/480be1a78)
- **coverage**:
- Include files based on `--project` filter - by [@​gtbuchanan](https://github.com/gtbuchanan) in [#​7885](https://github.com/vitest-dev/vitest/issues/7885) [<samp>(761be)</samp>](https://github.com/vitest-dev/vitest/commit/761beeeea)
- Prevent encoding filenames of uncovered files - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8239](https://github.com/vitest-dev/vitest/issues/8239) [<samp>(8a998)</samp>](https://github.com/vitest-dev/vitest/commit/8a9988043)
- Handle query param based transforms correctly - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8418](https://github.com/vitest-dev/vitest/issues/8418) [<samp>(a400a)</samp>](https://github.com/vitest-dev/vitest/commit/a400a9d2a)
- Enforce order of `vitest:coverage-transform` plugin - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8477](https://github.com/vitest-dev/vitest/issues/8477) [<samp>(ff517)</samp>](https://github.com/vitest-dev/vitest/commit/ff5170cff)
- V8 to ignore Vite's generated cjs import helpers - by [@​mrginglymus](https://github.com/mrginglymus) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8718](https://github.com/vitest-dev/vitest/issues/8718) [<samp>(35816)</samp>](https://github.com/vitest-dev/vitest/commit/35816fe8d)
- Keep only strings in `coverage.exclude` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8731](https://github.com/vitest-dev/vitest/issues/8731) [<samp>(c9c30)</samp>](https://github.com/vitest-dev/vitest/commit/c9c303178)
- **deps**:
- Update all non-major dependencies - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8235](https://github.com/vitest-dev/vitest/issues/8235) [<samp>(a1e57)</samp>](https://github.com/vitest-dev/vitest/commit/a1e576ae0)
- Update all non-major dependencies - in [#​8328](https://github.com/vitest-dev/vitest/issues/8328) [<samp>(aa79e)</samp>](https://github.com/vitest-dev/vitest/commit/aa79e2733)
- Update all non-major dependencies - in [#​8348](https://github.com/vitest-dev/vitest/issues/8348) [<samp>(13f94)</samp>](https://github.com/vitest-dev/vitest/commit/13f946229)
- Update all non-major dependencies - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8382](https://github.com/vitest-dev/vitest/issues/8382) [<samp>(704eb)</samp>](https://github.com/vitest-dev/vitest/commit/704eba24b)
- Update all non-major dependencies - in [#​8550](https://github.com/vitest-dev/vitest/issues/8550) [<samp>(048f7)</samp>](https://github.com/vitest-dev/vitest/commit/048f7a1ca)
- **jsdom**:
- Override globals that Fetch API relies on - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8390](https://github.com/vitest-dev/vitest/issues/8390) [<samp>(05b41)</samp>](https://github.com/vitest-dev/vitest/commit/05b4178e8)
- Support AbortSignal API - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8704](https://github.com/vitest-dev/vitest/issues/8704) [<samp>(f6690)</samp>](https://github.com/vitest-dev/vitest/commit/f6690ed46)
- **mocker**:
- Fix `regexpHoistable` to allow whitespace before parentheses - by [@​cszhjh](https://github.com/cszhjh) in [#​8231](https://github.com/vitest-dev/vitest/issues/8231) [<samp>(a0f9a)</samp>](https://github.com/vitest-dev/vitest/commit/a0f9ae3f0)
- **module-runner**:
- Resolve `resolvedSources` correctly - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8736](https://github.com/vitest-dev/vitest/issues/8736) [<samp>(8fc52)</samp>](https://github.com/vitest-dev/vitest/commit/8fc52974f)
- Support getBuiltins - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8746](https://github.com/vitest-dev/vitest/issues/8746) [<samp>(87bb8)</samp>](https://github.com/vitest-dev/vitest/commit/87bb8f49c)
- **pool**:
- Properly reuse the vm pool - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8758](https://github.com/vitest-dev/vitest/issues/8758) [<samp>(08498)</samp>](https://github.com/vitest-dev/vitest/commit/08498f0e9)
- **reporter**:
- Invisible CLI menus when `vitest --standalone` - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8248](https://github.com/vitest-dev/vitest/issues/8248) [<samp>(37cc2)</samp>](https://github.com/vitest-dev/vitest/commit/37cc26994)
- **rolldown-vite**:
- Properly disable minifier in the browser client - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8306](https://github.com/vitest-dev/vitest/issues/8306) [<samp>(f55bb)</samp>](https://github.com/vitest-dev/vitest/commit/f55bb81e6)
- **runner**:
- Don't bundle runner with utils - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8496](https://github.com/vitest-dev/vitest/issues/8496) [<samp>(2b4b0)</samp>](https://github.com/vitest-dev/vitest/commit/2b4b05823)
- **spy**:
- Fix spyOn types with optional method - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8499](https://github.com/vitest-dev/vitest/issues/8499) [<samp>(d3afa)</samp>](https://github.com/vitest-dev/vitest/commit/d3afa601a)
- Can respy on an exported method - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8521](https://github.com/vitest-dev/vitest/issues/8521) [<samp>(bf450)</samp>](https://github.com/vitest-dev/vitest/commit/bf450b433)
- Don't fail when spying on static getters - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8589](https://github.com/vitest-dev/vitest/issues/8589) [<samp>(ac1d9)</samp>](https://github.com/vitest-dev/vitest/commit/ac1d92f14)
- **types**:
- Ensure Chai declaration merge works with TS-Go - by [@​LukeAbby](https://github.com/LukeAbby) in [#​8188](https://github.com/vitest-dev/vitest/issues/8188) [<samp>(5261d)</samp>](https://github.com/vitest-dev/vitest/commit/5261df0b9)
- Allow returning a promise from defineConfig - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8651](https://github.com/vitest-dev/vitest/issues/8651) [<samp>(c3474)</samp>](https://github.com/vitest-dev/vitest/commit/c347487e6)
- **ui**:
- Keep the same tab open when clicking on different tests - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8599](https://github.com/vitest-dev/vitest/issues/8599) [<samp>(3e535)</samp>](https://github.com/vitest-dev/vitest/commit/3e535f78b)
- **utils**:
- Remove ast export - by [@​bluwy](https://github.com/bluwy) in [#​8435](https://github.com/vitest-dev/vitest/issues/8435) [<samp>(21622)</samp>](https://github.com/vitest-dev/vitest/commit/21622b5ae)
- **vitest**:
- Override `config.include` option with `config.browser.instances[].include` option if it is specified - by [@​Shinyaigeek](https://github.com/Shinyaigeek) in [#​8260](https://github.com/vitest-dev/vitest/issues/8260) [<samp>(010fc)</samp>](https://github.com/vitest-dev/vitest/commit/010fc55b5)
- **watch**:
- Filename filter runs duplicate tests in workspaces - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​8250](https://github.com/vitest-dev/vitest/issues/8250) [<samp>(932d8)</samp>](https://github.com/vitest-dev/vitest/commit/932d837c6)
- **wdio**:
- Wait for the driver to be properly closed - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8305](https://github.com/vitest-dev/vitest/issues/8305) [<samp>(c16ab)</samp>](https://github.com/vitest-dev/vitest/commit/c16abe71e)
- Properly construct the shadow root selector if there are multiple elements - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8354](https://github.com/vitest-dev/vitest/issues/8354) [<samp>(28765)</samp>](https://github.com/vitest-dev/vitest/commit/28765b4bb)
##### 🏎 Performance
- Avoid spawning extra workers if no tests will run there - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8446](https://github.com/vitest-dev/vitest/issues/8446) [<samp>(3fb3e)</samp>](https://github.com/vitest-dev/vitest/commit/3fb3e8036)
- Don't set `process.title` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8453](https://github.com/vitest-dev/vitest/issues/8453) [<samp>(0a766)</samp>](https://github.com/vitest-dev/vitest/commit/0a7666323)
- Remove chai as a direct dependency, keep it in `@vitest/expect` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8461](https://github.com/vitest-dev/vitest/issues/8461) [<samp>(cc98c)</samp>](https://github.com/vitest-dev/vitest/commit/cc98c611f)
- Reduce the amount of dynamic imports - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8465](https://github.com/vitest-dev/vitest/issues/8465) [<samp>(db6cd)</samp>](https://github.com/vitest-dev/vitest/commit/db6cd73ba)
- Use ES2022 language features - by [@​TrevorBurnham](https://github.com/TrevorBurnham) in [#​8492](https://github.com/vitest-dev/vitest/issues/8492) [<samp>(bb34c)</samp>](https://github.com/vitest-dev/vitest/commit/bb34c64dc)
- Delay populating node-globals - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8506](https://github.com/vitest-dev/vitest/issues/8506) [<samp>(41cbc)</samp>](https://github.com/vitest-dev/vitest/commit/41cbc5328)
- Get `workerId` from a global object - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8507](https://github.com/vitest-dev/vitest/issues/8507) [<samp>(46b13)</samp>](https://github.com/vitest-dev/vitest/commit/46b13f669)
- Replace startsWith with strict equality - by [@​btea](https://github.com/btea) in [#​8546](https://github.com/vitest-dev/vitest/issues/8546) [<samp>(c42e6)</samp>](https://github.com/vitest-dev/vitest/commit/c42e64e62)
- Reduce the number of unused imports - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8508](https://github.com/vitest-dev/vitest/issues/8508) [<samp>(9a79b)</samp>](https://github.com/vitest-dev/vitest/commit/9a79b90c9)
- Use experimental `meta.resolve` flag instead of a custom loader - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8567](https://github.com/vitest-dev/vitest/issues/8567) [<samp>(2e063)</samp>](https://github.com/vitest-dev/vitest/commit/2e0630b76)
- Create only one fetcher per project - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8762](https://github.com/vitest-dev/vitest/issues/8762) [<samp>(8e15b)</samp>](https://github.com/vitest-dev/vitest/commit/8e15bc8f9)
- **pool**: Resolve all environments first - by [@​sheremet-va](https://github.com/sheremet-va) in [#​8759](https://github.com/vitest-dev/vitest/issues/8759) [<samp>(d3ef4)</samp>](https://github.com/vitest-dev/vitest/commit/d3ef4f29c)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v3.2.4...v4.0.0)
</details>
---
### Configuration
📅 **Schedule**: (UTC)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4zLjAiLCJ1cGRhdGVkSW5WZXIiOiI0NC4zLjAiLCJ0YXJnZXRCcmFuY2giOiJuZXh0IiwibGFiZWxzIjpbXX0=-->
Thilawyn
changed target branch from next to master2026-07-30 15:36:51 +02:00
Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.
You can manually request rebase by checking the rebase/retry box above.
⚠️Warning: custom changes will be lost.
### Edited/Blocked Notification
Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.
You can manually request rebase by checking the rebase/retry box above.
⚠️ **Warning**: custom changes will be lost.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR contains the following updates:
^3.2.4→^4.0.0Release Notes
vitest-dev/vitest (vitest)
v4.1.10Compare Source
🐞 Bug Fixes
View changes on GitHub
v4.1.9Compare Source
🐞 Bug Fixes
importOriginalwith optimizer and query import [backport to v4] - by Hiroshi Ogawa, David Harris, Codexand Vladimir in #10546 (a5180)View changes on GitHub
v4.1.8Compare Source
🐞 Bug Fixes
cdpAPI whenallowWrite/allowExec: false[backport to v4] - by @hi-ogawa and Codex in #10450 (e4067)View changes on GitHub
v4.1.7Compare Source
🐞 Bug Fixes
View changes on GitHub
v4.1.6Compare Source
🐞 Bug Fixes
ToMatchScreenshotResolvePath- by @macarie and @sheremet-va in #10138 (31882)sequence.concurrent: truewith top-leveltest(..., { concurrent: false })+ depreactesequentialtest API and options - by @hi-ogawa, Codex and @sheremet-va in #10196 (2847d)🏎 Performance
View changes on GitHub
v4.1.5Compare Source
🚀 Experimental Features
instrumenteroption - by @BartWaardenburg and @AriPerkkio in #10119 (0e0ff)🐞 Bug Fixes
vi.defineHelpercalled as object method - by @hi-ogawa in #10163 (122c2)agentreporter tominimal- by @sheremet-va in #10157 (663b9)View changes on GitHub
v4.1.4Compare Source
🚀 Experimental Features
skipFullif agent detected - by @hi-ogawa in #10018 (53757)assertionas a public field - by @sheremet-va in #10095 (a120e)🐞 Bug Fixes
expect(..., message)consistent as error message prefix - by @hi-ogawa and Codex in #10068 (a1b5f)View changes on GitHub
v4.1.3Compare Source
🚀 Experimental Features
experimental.preParseflag - by @sheremet-va in #10070 (78273)browser.locators.exactoption - by @sheremet-va in #10013 (48799)TestAttachment.bodyEncoding- by @hi-ogawa in #9969 (89ca0)🐞 Bug Fixes
expect.pollinterval - by @hi-ogawa and Claude Sonnet 4.6 in #10022 (3f5bf)@vitest/coverage-v8and@vitest/coverage-istanbulas optional dependency - by @alan-agius4 in #10025 (146d4)defineHelperfor webkit async stack trace + update playwright 1.59.0 - by @hi-ogawa in #10036 (5a5fa)JestExtendError.contextfrom verbose error reporting - by @hi-ogawa in #9983 (66751)vitest- by @hi-ogawa and Codex in #10042 (691d3)View changes on GitHub
v4.1.2Compare Source
This release bumps Vitest's
flattedversion and removes version pinning to resolveflatted's CVE related issues (#9975).🐞 Bug Fixes
setupFilesfrom parent directory - by @hi-ogawa in #9960 (7aa93)toMatchScreenshotcan't capture a stable screenshot - by @macarie in #9847 (faace)coverageConfigDefaultsvalues and types - by @Arthie in #9940 (b3c99)View changes on GitHub
v4.1.1Compare Source
🚀 Features
matchesTagsto test if the current filter matches tags - by @sheremet-va in #9913 (eec53)experimental.vcsProvider- by @sheremet-va in #9928 (56115)🐞 Bug Fixes
TestProject.testFilesListinternal properly - by @sapphi-red in #9867 (54f26)use- by @oilater in #9831 and #9861 (633ae)vi.advanceTimersto the preview provider - by @sheremet-va in #9891 (1bc3e)--standalonemode without running tests - by @sheremet-va in #9911 (e78ad)body- by @sheremet-va in #9912 (6fdb2)retry.conditionRegExp serialization issue - by @nstepien and @hi-ogawa in #9942 (7b605)testreturn as tests - by @sheremet-va in #9871 (141e7)View changes on GitHub
v4.1.0Compare Source
Vitest 4.1 is out!
This release page lists all changes made to the project during the 4.1 beta. To get a review of all the new features, read our blog post.
🚀 Features
setTickModeto timer controls - by @atscott and @sheremet-va in #8726 (4b480)toTestSpecificationto reported tasks - by @sheremet-va in #9464 (1a470)vi.mockorvi.hoistedare declared outside of top level of the module - by @sheremet-va in #9387 (5db54)aroundEachandaroundAllhooks - by @sheremet-va in #9450 (2a8cb)neworallin--updateflag - by @sheremet-va in #9543 (a5acf)metain test options - by @sheremet-va in #9535 (7d622)test.extendsyntax - by @sheremet-va in #9550 (e5385)vitest listto statically collect tests instead of running files to collect them - by @sheremet-va in #9630 (7a8e7)--detect-async-leaks- by @AriPerkkio in #9528 (c594d)mockThrowandmockThrowOnce- by @thor-juhasz and @sheremet-va in #9512 (61917)update: "none"and add docs about snapshots behavior on CI - by @hi-ogawa in #9700 (05f18)launchOptionswithconnectOptions- by @hi-ogawa in #9702 (f0ff1)page/locator.markAPI to enhance playwright trace - by @hi-ogawa in #9652 (d0ee5)testinexperimental_parseSpecification- by @jgillick and Jeremy Gillick in #9235 (2f367)createSpecification- by @sheremet-va in #9336 (c8e6c)runTestFilesas alternative torunTestSpecifications- by @sheremet-va in #9443 (43d76)allowWriteandallowExecoptions toapi- by @sheremet-va in #9350 (20e00)toTestSpecification- by @sheremet-va in #9627 (6f17d)userEvent.wheelAPI - by @macarie in #9188 (66080)filterNodeoption to prettyDOM for filtering browser assertion error output - by @Copilot, sheremet-va and @sheremet-va in #9475 (d3220)detailsPanelPositionoption and button - by @shairez in #9525 (c8a31)findElementand enable strict mode in webdriverio and preview - by @sheremet-va in #9677 (c3f37)ignore start/stopignore hints - by @AriPerkkio in #9204 (e59c9)coverage.changedoption to report only changed files - by @kykim00 and @AriPerkkio in #9521 (1d939)onModuleRunnerhook toworker.init- by @sheremet-va in #9286 (e977f)importDurations: { limit, print }options - by @hi-ogawa, Claude Opus 4.6 and @sheremet-va in #9401 (7e10f)importDurations- by @hi-ogawa and Claude Opus 4.6 in #9533 (3f7a5)beforeAll/afterAll- by @sheremet-va in #9572 (c8339)agentreporter to reduce ai agent token usage - by @cpojer in #9779 (3e9e0)retryoptions - by @MazenSamehR, Matan Shavit, @AriPerkkio and @sheremet-va in #9370 (9e4cf)🐞 Bug Fixes
meta.urlincreateRequire- by @sheremet-va in #9441 (e3422)external/noExternalduringconfigEnvironmenthook - by @hi-ogawa and Claude Opus 4.6 in #9508 (59ea2)browser.isolateis used - by @sheremet-va in #9410 (3d48e)vi.mock({ spy: true })node v8 coverage - by @hi-ogawa, hi-ogawa and Claude Opus 4.6 in #9541 (687b6).namefrom statically collected test - by @sheremet-va in #9596 (b66ff)expect.soft- by @iumehara, @hi-ogawa and Claude Opus 4.6 in #9231 (3eb2c)sequence.shuffle.testsis enabled - by @kaigritun, Kai Gritun and @sheremet-va in #9576 (8182b)expect/src/utilsfromvitest- by @hi-ogawa in #9616 (48739)--detect-async-leaks- by @AriPerkkio in #9638 (9fd4c)aroundEach/Allwhen inneraroundEach/Allthrows - by @hi-ogawa in #9657 (4ec6c)aroundEach/Allsetup timed out - by @hi-ogawa in #9670 (bb013)VitestRunnerConfigoptional fields withSerializedConfig- by @hi-ogawa in #9661 (79520)toBe*spy assertions in favor oftoHaveBeen*(andtoThrowError) - by @sheremet-va in #9665 (4d390)aroundEach/Allerrors but aggregate them on runner - by @hi-ogawa in #9673 (b6365)resolves/rejectschained assertion error - by @hi-ogawa in #9679 (c6151)maxConcurrency- by @hi-ogawa in #9653 (16d13)resolve.conditionsfor externals - by @hi-ogawa in #9717 (1d498)mockObjectchange backwards compatible - by @sheremet-va in #9744 (84c69)URL.nameon jsdom - by @hi-ogawa in #9767 (031f3)vi.importActual()for virtual modules - by @hi-ogawa and Claude Opus 4.6 in #9772 (1e89e)FixtureAccessErrorif suite hook accesses undefined fixture - by @sheremet-va in #9786 (fc2ce)loadortransformoriginal module - by @hi-ogawa and Claude Opus 4.6 in #9774 (a8216)hideSkippedTestsshould not hidetest.todo- by @oilater in #9562 and #9781 (8181e)beforeEachhooks - by @hi-ogawa and Claude Opus 4.6 in #9826 (99e52)performance.nowto measure test timeout duration - by @hi-ogawa and Claude Opus 4.6 in #9795 (f48a6)toMatchScreenshotpasses - by @macarie in #9289 (46aab)toMatchScreenshot- by @macarie in #9552 (83ca0)--remote-debugging-addressfrom chrome args - by @hi-ogawa and @AriPerkkio in #9712 (f09bb)ensureAwaited- by @sheremet-va in #9732 (97685)getCDPSessionandcdp()- by @AriPerkkio in #9716 (689a2)deepEqualin the config because it's not serializable - by @sheremet-va in #9666 (9ee99)thresholds.autoUpdateto preserve ending whitespace - by @AriPerkkio in #9436 (7e534)/config/#optionhash links causing hydration errors - by @hi-ogawa, Claude Opus 4.6 and @sheremet-va in #9610 (a603c)toMatchObject(Map/Set)should expectMap/Seton left hand side - by @hi-ogawa and Claude Opus 4.6 in #9532 (381da)toThrowand make Error detection robust - by @hi-ogawa and Claude Opus 4.6 in #9570 (de215)dotreporter leaves pending tests - by @AriPerkkio in #9684 (4d793)undefined- by @sheremet-va in #9511 (6f181)bench.reportersno longer gives type errors when passing file name string paths - by @Bertie690 in #9695 (093c8)🏎 Performance
View changes on GitHub
v4.0.18Compare Source
🚀 Experimental Features
onModuleRunnerhook toworker.init- by @sheremet-va in #9286 (ea837)🐞 Bug Fixes
meta.urlincreateRequire- by @sheremet-va in #9441 (e0572)View changes on GitHub
v4.0.17Compare Source
🚀 Experimental Features
🐞 Bug Fixes
addEventHandler#9371 - by @ThibautMarechal in #9372 and #9371 (40841)process.envandimport.meta.envdefines in inline project - by @hi-ogawa in #9239 (b70c9)ErrorEvent.messagewhen unhandledErrorEvent.erroris null - by @hi-ogawa in #9322 (5d84e)fileParallelismon an instance - by @sheremet-va in #9328 (15006)istanbul-lib-source-mapsusage - by @AriPerkkio in #9344 (b0940)View changes on GitHub
v4.0.16Compare Source
🐞 Bug Fixes
process.versionsstub - by @AriPerkkio in #9174 (78cfb)test.poolOptionsif it's set - by @sheremet-va in #9226 (f7f6a)recordArtifactfrom the vitest package - by @macarie in #9186 (01c56)import.meta.envdefine - by @hi-ogawa in #9205 (01a9a)setupEnvironmentfor custom pools - by @AriPerkkio in #9187 (5d26b)View changes on GitHub
v4.0.15Compare Source
🚀 Experimental Features
🐞 Bug Fixes
optimizeDeps.rolldownOptionsto fix depreated warning + fixssr.external: true- by @hi-ogawa in #9121 (fd8bd)deps.optimizer- by @hi-ogawa in #9125 (4c754)toMatchScreenshotonly once when used withexpect.element- by @macarie in #9132 (0d2e7)--browser.providerfrom docs - by @sheremet-va in #9115 (120b3)currentTestNamein extended matchers - by @macarie in #9106 (e4345)CTRL+cforceful exits - by @AriPerkkio in #9140 (d57d8)View changes on GitHub
v4.0.14Compare Source
🚀 Experimental Features
utils.configurePrettyDOM- by @sheremet-va in #9103 (2cc34)toMatchScreenshotwith comparison slider - by @macarie in #8813 (c37c2)🐞 Bug Fixes
collecttoimport, removeprepare- by @sheremet-va in #9091 (1256b)onCancelon rpc destroy - by @AriPerkkio in #9088 (f5b72)VITEST_POOL_ID+VITEST_WORKER_IDbefore environment setup - by @AriPerkkio in #9085 (37918)postMessageto send ports to workers - by @whitphx and @AriPerkkio in #9078 (9d176)🏎 Performance
debugwithobug- by @sxzz and @AriPerkkio in #9057 (acc51)View changes on GitHub
v4.0.13Compare Source
🐞 Bug Fixes
🏎 Performance
fsCacheModuleis enabled, read from the memory when possible - by @sheremet-va in #9076 (6b9a1)View changes on GitHub
v4.0.12Compare Source
🐞 Bug Fixes
fsModuleCachePathby default - by @sheremet-va in #9063 (9a8bc)@opentelemetry/apiin public types - by @sheremet-va in #9066 (e944a)View changes on GitHub
v4.0.11Compare Source
🚀 Experimental Features
taskinMatchState- by @macarie in #9022 (afd1f)🏎 Performance
View changes on GitHub
v4.0.10Compare Source
🐞 Bug Fixes
onCancelwhen worker is terminated - by @sheremet-va in #9033 (6d7f0)onFinished) - by @userquin in #8975 (f56dc)View changes on GitHub
v4.0.9Compare Source
🚀 Experimental Features
🐞 Bug Fixes
Request- by @sheremet-va in #8985 (506a9)View changes on GitHub
v4.0.8Compare Source
🐞 Bug Fixes
noExternalmerging bug on Vite 6 - by @hi-ogawa in #8950 (bcb13)expect.element()- by @StyleShit in #8954 (9638d)vi.fn(), fix types forvi.spyOn(obj, class)- by @sheremet-va in #8956 (75e7f)View changes on GitHub
v4.0.7Compare Source
🐞 Bug Fixes
processin case global is overwritten - by @AriPerkkio in #8916 (6240d)isolate: false- by @sheremet-va in #8915 (c9078)toContainElement()matcher - by @vitalybaev in #8910 and #8927 (35a27)isolateoption, deprecatebrowser.isolate/browser.fileParallelism- by @sheremet-va in #8890 (9d2b4)--execArgvas array - by @AriPerkkio in #8924 (751c3)URL.createObjectURL,FormData.set(prop, blob)- by @sheremet-va in #8935 (a1b73)--requireargument when running in deno - by @pi0 in #8897 (d41fa)tsc- by @AriPerkkio in #8920 (fdb2e)🏎 Performance
Array.fromcall - by @Connormiha in #8907 (b6014)View changes on GitHub
v4.0.6Compare Source
🐞 Bug Fixes
isolateandfileParallelismare false - by @sheremet-va in #8889 (31706)FormDatatoRequest- by @sheremet-va in #8880 (197ca)View changes on GitHub
v4.0.5Compare Source
🐞 Bug Fixes
ssr.noExternalwhen externalizing dependencies, fix Svelte and Astro - by @sheremet-va in #8862 (a4f86)Locatortype in selectOptions element parameter - by @rzzf and @sheremet-va in #8848 (7ee28)getBuiltinsunconditionally - by @sapphi-red in #8863 (0e858)groupIdtogroupOrderin error message - by @Yohannfra in #8856 (b9aab)🏎 Performance
--no-isolate --maxWorkers=1- by @AriPerkkio in #8835 (584aa)View changes on GitHub
v4.0.4Compare Source
🐞 Bug Fixes
node:prefix - by @sheremet-va in #8829 (06208)MaxListenersExceededWarning- by @AriPerkkio in #8820 (d1bff)stdioto logger - by @AriPerkkio in #8809 (fb95f)vi.mockedutility - by @sheremet-va in #8839 (f8756)isolate: false- by @AriPerkkio in #8821 (573dc)🏎 Performance
View changes on GitHub
v4.0.3Compare Source
🐞 Bug Fixes
View changes on GitHub
v4.0.2Compare Source
🐞 Bug Fixes
length- by @sheremet-va in #8778 (d4c2b)restoreMocksandmockResetare set in the config - by @sheremet-va in #8781 (2eedb)View changes on GitHub
v4.0.1Compare Source
🐞 Bug Fixes
getBuiltinscheck - by @sheremet-va in #8765 (81000)View changes on GitHub
v4.0.0Compare Source
Vitest 4.0 is out!
To stay updated, read our blog post and check the migration guide.
🚨 Breaking Changes
'basic'reporter - by @AriPerkkio in #7884 (82fcf)vitest/nodeexports - by @sheremet-va in #8197 (dc848)vitest/nodeinstead - by @sheremet-va in #8200 (1e60c)workspaceoption in favor ofprojects- by @sheremet-va in #8218 (76fb7)--standalonewhen CLI filename filter is used - by @AriPerkkio in #8262 (013bf)minWorkersand set it automatically to 0 in non watch mode - by @sheremet-va in #8454 (2c2d1)treereporter - by @sheremet-va and @AriPerkkio in #8500 (25fd3)tinypool- by @AriPerkkio and @sheremet-va in #8705 (4822d)todoif no function is passed down totestordescribe- by @sheremet-va in #8346 (1a81c)🚀 Features
onUnhandledErrorcallback - by @sheremet-va in #8162 (924cb)expect.assertfor type narrowing - by @sheremet-va in #8695 (fe589)displayAnnotationsoption togithub-options- by @sheremet-va in #8706 (4a66d)experimental_parseSpecifications- by @sheremet-va in #8408 (fdeb2)enableCoverageanddisableCoveragemethods - by @sheremet-va and @AriPerkkio in #8412 (61eb7)getGlobalTestNamePatternmethod - by @sheremet-va in #8438 (bdb70)relativeModuleIdtoTestModule- by @sheremet-va in #8505 (3be09)getSeedmethod - by @sheremet-va in #8592 (438c4)toBeInViewportutility method to assert element is in viewport or not - by @Shinyaigeek in #8234 (ceed5)vitest initcli command - by @thejackshelton in #8330 (1638b)toMatchScreenshotfor Visual Regression Testing - by @macarie in #8041 (d45f9)trackUnhandledErrorsoption - by @sheremet-va in #8386 (c0ec0)lengthproperty to locators,toHaveLengthnow accepts locators - by @sheremet-va in #8512 (2308c)optionsonBrowserProviderOption- by @sheremet-va in #8609 (0d0e5)--inspectoption in webdriverio - by @sheremet-va in #8613 (38adc)autoUpdateto support percentage formatting - by @Battjmo and @AriPerkkio in #8456 (99e01)toBeNullableexpect function to check provided value is nullish - by @Shinyaigeek and @sheremet-va in #8294 (eeec5)automockerentry - by @sheremet-va in #8301 (e9c92)🐞 Bug Fixes
test.extend- by @AriPerkkio in #8278 (43977)--changedflag support tovitest listcommand - by @haakonjackfloat in #8270 and #8272 (e71a5)browser- by @sheremet-va in #8334 (0417a)oxcinstead ofesbuildonrolldown-vite- by @hi-ogawa in #8378 (e922e)stacksproperty in Node.js context - by @sheremet-va in #8392 (b825e)import.meta.resolveon Vite 7 - by @hi-ogawa in #8493 (549d3)expect.pollassertion fails - by @sheremet-va in #8483 (fb450)useFakeTimersis called multiple times - by @sheremet-va in #8504 (ed7e3)expect.extendmatchers - by @lzl0304 in #8520 (96945)globalSetupfiles - by @sheremet-va in #8534 (8978a)$and%formatting totest.for/eachtitle - by @hi-ogawa in #8557 (ea6d7)"./*"with specific files in vitest package - by @hi-ogawa in #8560 (ce746)optimizeDeps.includefor browser mode - by @jake-danton in #8570 (cdcf7)enginesfield to drop Node 18 support - by @sheremet-va in #8608 (9a0bf)baseoption doesn't crash vitest - by @sheremet-va in #8760 (9f0ec)locator.element()returnsHTMLElementorSVGElement- by @sheremet-va in #8440 (c1ac1)vitedirectly - by @sheremet-va in #8541 (d7fca)not.toBeInTheDocument()- by @sheremet-va in #8751 (f5d06)objectContainingexpect utility to have more compatibility to jest's one - by @Shinyaigeek in #8241 (480be)--projectfilter - by @gtbuchanan in #7885 (761be)vitest:coverage-transformplugin - by @AriPerkkio in #8477 (ff517)coverage.exclude- by @sheremet-va in #8731 (c9c30)regexpHoistableto allow whitespace before parentheses - by @cszhjh in #8231 (a0f9a)resolvedSourcescorrectly - by @sheremet-va in #8736 (8fc52)vitest --standalone- by @AriPerkkio in #8248 (37cc2)config.includeoption withconfig.browser.instances[].includeoption if it is specified - by @Shinyaigeek in #8260 (010fc)🏎 Performance
process.title- by @sheremet-va in #8453 (0a766)@vitest/expect- by @sheremet-va in #8461 (cc98c)workerIdfrom a global object - by @sheremet-va in #8507 (46b13)meta.resolveflag instead of a custom loader - by @sheremet-va in #8567 (2e063)View changes on GitHub
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate.
Edited/Blocked Notification
Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.
You can manually request rebase by checking the rebase/retry box above.
⚠️ Warning: custom changes will be lost.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.