Vitest v4.1.0stable Released Mar 12, 2026
Impact Score: 5/10

Vitest v4.1.0 โ€” Release Notes & Engineering Impact

Source available โ€” automated, not human-reviewed

Component: vitest ยท Channel: stable. Automated analysis, not a compatibility certification. How this works.

Analysis updated: 2026-11-01.

Compatibility not verified โ€” check source notes
๐Ÿ“„ .MD
โšก Executive Summary (TL;DR)

Vitest v4.1.0. Source highlight: 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.

Who Does This Impact? (Role-Based Analysis)

๐Ÿ’ป Software Engineers & Devs

Check the source notes against the package and APIs you use before upgrading.

๐Ÿ“Š Product & Engineering Leads

Use the documented changes to assess relevance to your product; release frequency alone is not a quality measure.

โš™๏ธ DevOps & Security

Verify the target version, runtime requirements and rollback procedure in the official documentation.

โœจ New Features & Capabilities (6)

  • Return a disposable from doMock() &nbsp;-&nbsp; by @kirkwaiblinger in https://github.com/vitest-dev/vitest/issues/9332 <samp>(e3e65)</samp>
  • Added chai style assertions &nbsp;-&nbsp; by @ronnakamoto and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8842 <samp>(841df)</samp>
  • Update to sinon/fake-timers v15 and add `setTickMode` to timer controls &nbsp;-&nbsp; by @atscott and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8726 <samp>(4b480)</samp>
  • Expose matcher types &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9448 <samp>(3e4b9)</samp>
  • Add `toTestSpecification` to reported tasks &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9464 <samp>(1a470)</samp>
  • Show a warning if `vi.mock` or `vi.hoisted` are declared outside of top level of the module &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9387 <samp>(5db54)</samp>

โšก Performance & Enhancements (1)

  • **pretty-format**: Combine DOMElement plugins &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9581 <samp>(da85a)</samp>

๐Ÿ”ง Bug Fixes & Patches (6)

  • Support vite 8 beta, fix type issues in the config with different vite versions &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9587 <samp>(99028)</samp>
  • Deprecate several vitest/* entry points &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9347 <samp>(fd459)</samp>
  • Use `meta.url` in `createRequire` &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9441 <samp>(e3422)</samp>
  • Preact browser mode init example of render function not async &nbsp;-&nbsp; by @WuMingDao in https://github.com/vitest-dev/vitest/issues/9375 <samp>(2bea5)</samp>
  • Deprecate unused types in matcher context &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9449 <samp>(20f87)</samp>
  • Handle `external/noExternal` during `configEnvironment` hook &nbsp;-&nbsp; by @hi-ogawa and **Claude Opus 4.6** in https://github.com/vitest-dev/vitest/issues/9508 <samp>(59ea2)</samp>
๐Ÿ“„ View Raw Release Notes (Original Developer Log)
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). ### &nbsp;&nbsp;&nbsp;๐Ÿš€ Features - Return a disposable from doMock() &nbsp;-&nbsp; by @kirkwaiblinger in https://github.com/vitest-dev/vitest/issues/9332 [<samp>(e3e65)</samp>](https://github.com/vitest-dev/vitest/commit/e3e659a96) - Added chai style assertions &nbsp;-&nbsp; by @ronnakamoto and @sheremet-va in 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 &nbsp;-&nbsp; by @atscott and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8726 [<samp>(4b480)</samp>](https://github.com/vitest-dev/vitest/commit/4b480aaed) - Expose matcher types &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9448 [<samp>(3e4b9)</samp>](https://github.com/vitest-dev/vitest/commit/3e4b913b1) - Add `toTestSpecification` to reported tasks &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @Copilot, **sheremet-va** and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9476 [<samp>(77d75)</samp>](https://github.com/vitest-dev/vitest/commit/77d75fd34) - Support tags &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9478 [<samp>(de7c8)</samp>](https://github.com/vitest-dev/vitest/commit/de7c8a521) - Implement `aroundEach` and `aroundAll` hooks &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9450 [<samp>(2a8cb)</samp>](https://github.com/vitest-dev/vitest/commit/2a8cb9dc2) - Stabilize experimental features &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9543 [<samp>(a5acf)</samp>](https://github.com/vitest-dev/vitest/commit/a5acf28a5) - Support `meta` in test options &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @hi-ogawa and **Claude Opus 4.6** in 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 &nbsp;-&nbsp; by @macarie in 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 &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9630 [<samp>(7a8e7)</samp>](https://github.com/vitest-dev/vitest/commit/7a8e7fc20) - Add `--detect-async-leaks` &nbsp;-&nbsp; by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9528 [<samp>(c594d)</samp>](https://github.com/vitest-dev/vitest/commit/c594d4af3) - Implement `mockThrow` and `mockThrowOnce` &nbsp;-&nbsp; by @thor-juhasz and @sheremet-va in 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 &nbsp;-&nbsp; by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9700 [<samp>(05f18)</samp>](https://github.com/vitest-dev/vitest/commit/05f1854e2) - Support playwright `launchOptions` with `connectOptions` &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @hi-ogawa in 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` &nbsp;-&nbsp; by @jgillick and **Jeremy Gillick** in https://github.com/vitest-dev/vitest/issues/9235 [<samp>(2f367)</samp>](https://github.com/vitest-dev/vitest/commit/2f367fad3) - Add filters to `createSpecification` &nbsp;-&nbsp; by @sheremet-va in 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` &nbsp;-&nbsp; by @sheremet-va in 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` &nbsp;-&nbsp; by @sheremet-va in 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` &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9627 [<samp>(6f17d)</samp>](https://github.com/vitest-dev/vitest/commit/6f17d5ddf) - **browser**: - Add `userEvent.wheel` API &nbsp;-&nbsp; by @macarie in 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 &nbsp;-&nbsp; by @Copilot, **sheremet-va** and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9475 [<samp>(d3220)</samp>](https://github.com/vitest-dev/vitest/commit/d3220fcd8) - Support playwright persistent context &nbsp;-&nbsp; by @hi-ogawa, **Claude Opus 4.6** and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9229 [<samp>(f865d)</samp>](https://github.com/vitest-dev/vitest/commit/f865d2ba4) - Added `detailsPanelPosition` option and button &nbsp;-&nbsp; by @shairez in https://github.com/vitest-dev/vitest/issues/9525 [<samp>(c8a31)</samp>](https://github.com/vitest-dev/vitest/commit/c8a31147c) - Use BlazeDiff instead of pixelmatch &nbsp;-&nbsp; by @macarie in 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 &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9677 [<samp>(c3f37)</samp>](https://github.com/vitest-dev/vitest/commit/c3f37721c) - **cli**: - Add @bomb.sh/tab completions &nbsp;-&nbsp; by @AmirSa12 and @sheremet-va in 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 &nbsp;-&nbsp; by @AriPerkkio in 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 &nbsp;-&nbsp; by @kykim00 and @AriPerkkio in 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` &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @sheremet-va and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9210 [<samp>(9be61)</samp>](https://github.com/vitest-dev/vitest/commit/9be6121ee) - Add `importDurations: { limit, print }` options &nbsp;-&nbsp; by @hi-ogawa, **Claude Opus 4.6** and @sheremet-va in 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` &nbsp;-&nbsp; by @hi-ogawa and **Claude Opus 4.6** in 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` &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @cpojer in https://github.com/vitest-dev/vitest/issues/9779 [<samp>(3e9e0)</samp>](https://github.com/vitest-dev/vitest/commit/3e9e096a2) - **runner**: - Enhance `retry` options &nbsp;-&nbsp; by @MazenSamehR, **Matan Shavit**, @AriPerkkio and @sheremet-va in 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 &nbsp;-&nbsp; by @userquin in https://github.com/vitest-dev/vitest/issues/9465 [<samp>(73b10)</samp>](https://github.com/vitest-dev/vitest/commit/73b10f1b9) - Add project filter/sort support &nbsp;-&nbsp; by @userquin in https://github.com/vitest-dev/vitest/issues/8689 [<samp>(0c7ea)</samp>](https://github.com/vitest-dev/vitest/commit/0c7eaac16) - Add duration sorting to explorer &nbsp;-&nbsp; by @julianhahn and @cursoragent in https://github.com/vitest-dev/vitest/issues/9603 [<samp>(209b1)</samp>](https://github.com/vitest-dev/vitest/commit/209b1b0e1) - Implement filter for slow tests &nbsp;-&nbsp; by @DerYeger and @userquin in 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 &nbsp;-&nbsp; by @macarie and **jhnance** in https://github.com/vitest-dev/vitest/issues/9579 [<samp>(96bfc)</samp>](https://github.com/vitest-dev/vitest/commit/96bfc8345) ### &nbsp;&nbsp;&nbsp;๐Ÿž Bug Fixes - Deprecate several vitest/* entry points &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9347 [<samp>(fd459)</samp>](https://github.com/vitest-dev/vitest/commit/fd45928be) - Use `meta.url` in `createRequire` &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @WuMingDao in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @hi-ogawa and **Claude Opus 4.6** in 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 &nbsp;-&nbsp; by @hi-ogawa and **Claude Opus 4.6** in 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 &nbsp;-&nbsp; by @hi-ogawa and **Claude Opus 4.6** in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @hi-ogawa, **hi-ogawa** and **Claude Opus 4.6** in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9602 [<samp>(89cbd)</samp>](https://github.com/vitest-dev/vitest/commit/89cbdaea3) - Support snapshot with `expect.soft` &nbsp;-&nbsp; by @iumehara, @hi-ogawa and **Claude Opus 4.6** in 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 &nbsp;-&nbsp; by @kaigritun, **Kai Gritun** and @sheremet-va in 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` &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @sheremet-va in 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` &nbsp;-&nbsp; by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9638 [<samp>(9fd4c)</samp>](https://github.com/vitest-dev/vitest/commit/9fd4ce533) - Hanging-reporter link in cli &nbsp;-&nbsp; by @flx-sta in 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 &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @hi-ogawa and **Claude Opus 4.6** in 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 &nbsp;-&nbsp; by @hi-ogawa in 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` &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @nami8824 in 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`) &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @lesleh in https://github.com/vitest-dev/vitest/issues/9650 and https://github.com/vitest-dev/vitest/issues/9651 [<samp>(bb203)</samp>](https://github.com/vitest-dev/vitest/commit/bb20389f4) - Hooks should respect `maxConcurrency` &nbsp;-&nbsp; by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9653 [<samp>(16d13)</samp>](https://github.com/vitest-dev/vitest/commit/16d13d981) - Recursively autospy module object &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @hi-ogawa and @sheremet-va in 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 &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9731 [<samp>(c5225)</samp>](https://github.com/vitest-dev/vitest/commit/c52259330) - Fix re-mocking virtual module &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9729 [<samp>(0cb2f)</samp>](https://github.com/vitest-dev/vitest/commit/0cb2f7239) - Make `mockObject` change backwards compatible &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9744 [<samp>(84c69)</samp>](https://github.com/vitest-dev/vitest/commit/84c69497f) - Fix `URL.name` on jsdom &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @hi-ogawa and **Claude Opus 4.6** in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @Koutaro-Hanabusa and @hi-ogawa in 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 &nbsp;-&nbsp; by @hi-ogawa and **Claude Opus 4.6** in 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` &nbsp;-&nbsp; by @oilater in https://github.com/vitest-dev/vitest/issues/9562 and 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 &nbsp;-&nbsp; by @hi-ogawa in 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 &nbsp;-&nbsp; by @hi-ogawa and **Claude Opus 4.6** in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @hi-ogawa and **Claude Opus 4.6** in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @macarie in https://github.com/vitest-dev/vitest/issues/9289 [<samp>(46aab)</samp>](https://github.com/vitest-dev/vitest/commit/46aabaa44) - Hide injected data-testid attributes &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @dkkim0122 in 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` &nbsp;-&nbsp; by @macarie in 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 &nbsp;-&nbsp; by @hi-ogawa and @AriPerkkio in 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` &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9732 [<samp>(97685)</samp>](https://github.com/vitest-dev/vitest/commit/9768517b8) - Types of `getCDPSession` and `cdp()` &nbsp;-&nbsp; by @AriPerkkio in 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 &nbsp;-&nbsp; by @Copilot, **hi-ogawa** and @hi-ogawa in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @AriPerkkio in 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 &nbsp;-&nbsp; by @AriPerkkio in 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 &nbsp;-&nbsp; by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9192 [<samp>(90c30)</samp>](https://github.com/vitest-dev/vitest/commit/90c302f3b) - Update all non-major dependencies &nbsp;-&nbsp; in https://github.com/vitest-dev/vitest/issues/9485 [<samp>(c0118)</samp>](https://github.com/vitest-dev/vitest/commit/c01186022) - Update all non-major dependencies &nbsp;-&nbsp; in 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 &nbsp;-&nbsp; by @hi-ogawa, **Claude Opus 4.6** and @sheremet-va in 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 &nbsp;-&nbsp; by @hi-ogawa and **Claude Opus 4.6** in https://github.com/vitest-dev/vitest/issues/9532 [<samp>(381da)</samp>](https://github.com/vitest-dev/vitest/commit/381da4a9d) - Fix objectContaining with proxy &nbsp;-&nbsp; by @hi-ogawa and **Claude Opus 4.6** in 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 &nbsp;-&nbsp; by @hi-ogawa and **Claude Opus 4.6** in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @AriPerkkio in 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 &nbsp;-&nbsp; by @AriPerkkio in 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 &nbsp;-&nbsp; by @j2h30728 in https://github.com/vitest-dev/vitest/issues/8152 and 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` &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @sheremet-va in 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 &nbsp;-&nbsp; by @Bertie690 in 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 &nbsp;-&nbsp; by @macarie in 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 &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9536 [<samp>(d9305)</samp>](https://github.com/vitest-dev/vitest/commit/d93055fc7) ### &nbsp;&nbsp;&nbsp;๐ŸŽ Performance - **pretty-format**: Combine DOMElement plugins &nbsp;-&nbsp; by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9581 [<samp>(da85a)</samp>](https://github.com/vitest-dev/vitest/commit/da85a3267) ##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.17...v4.1.0)