fix(browser): wait for iframe tester readiness before preparing - #10497
Conversation
✅ Deploy Preview for vitest-dev ready!Built without sensitive environment variables
To edit notification comments on pull requests, go to your Netlify project configuration. |
I am confused why we need multiple id trackers. There can only be one iframe on the page at a time, the There should never be any "stale" or "reloaded" iframes |
| @@ -0,0 +1,150 @@ | |||
| // @vitest-environment happy-dom | |||
There was a problem hiding this comment.
I would prefer tests that actually fail without you change (even if not always). Having unit tests for the registry doesn't give me any confidence that API works in a real orchestrator. Especially because there is supposed to only be a single iframe anyway. The idea of having a registry with this premise sounds a bit ridiculous, not gonna lie
There was a problem hiding this comment.
The idea of having a registry with this premise sounds a bit ridiculous, not gonna lie
Yea it was. I was trusting Codex's answers about how it was possible that there would be stale events coming from <iframe>s that needed to be disambiguated.
I've removed this unit test and with Codex was able to make a test/browser/specs/readiness.test.ts integration test file which fails on the current main branch but passes w/ this code change.
|
I've also noticed that after your previous PR we are getting |
Oh dang! Probably best to revert that PR then. 😞 |
d9f85f2 to
34a49e6
Compare
| startTime, | ||
| otelCarrier: this.traces.getContextCarrier(otelContext), | ||
| }).then(resolve, error => reject(this.dispatchIframeError(error))) | ||
| this.waitForReady(iframeId) |
There was a problem hiding this comment.
This is where the actual bug-fix is. Instead of just assuming we can this.sendEventToIframe({ event: 'prepare', ... }) we now wait until the <iframe> has told us it is ready.
34a49e6 to
62244f4
Compare
62244f4 to
5ba3c64
Compare
|
LGTM, please confirm that the fix works for your use case 🙏 |
@vitest/browser
@vitest/browser-playwright
@vitest/browser-preview
@vitest/browser-webdriverio
@vitest/coverage-istanbul
@vitest/coverage-v8
@vitest/expect
@vitest/mocker
@vitest/pretty-format
@vitest/snapshot
@vitest/spy
@vitest/ui
@vitest/utils
vitest
@vitest/web-worker
commit: |
Yes I tested this PR's build version of |
…) [backport to v4] (#10556) Co-authored-by: Séamus O'Connor <seamus.oconnor@seeq.com>
##### [v4.1.10](https://github.com/vitest-dev/vitest/releases/tag/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)
##### 🐞 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)
##### 🐞 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)
##### 🐞 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)
##### 🐞 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)
##### 🚀 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)
##### 🚀 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)
##### 🚀 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)
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)
##### 🚀 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)
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)
##### 🚀 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)
Description
During the investigation for
vitest-randomly-hanging-in-CI I (with the help of Codex) initially diagnosed a race condition that was ultimately fixed but I still was getting CI failures / hangs (even after that first fix) — exposing another race condition.It's a browser-runner readiness race where the orchestrator could send the initial
prepareevent before the tester<iframe>was actually ready to receive channel messages.Resolves (do you need an issue for a bug fix?)
This PR adds an explicit tester-ready handshake between the browser tester and orchestrator.
Changes
<iframe>channel event:readyreadyonly after its channel listener is registered<iframe>to reportreadybefore sendingpreparePlease don't delete this checklist! Before submitting the PR, please make sure you do the following:
pnpm-lock.yamlunless you introduce a new test example.Tests
pnpm test:ci.Documentation
pnpm run docscommand.Changesets
feat:,fix:,perf:,docs:, orchore:.AI assisted: Codex