🐞 Bug Fixes
- Pin last supported vite-node version - by @sheremet-va <samp>(16f12)</samp>
allowWrite and allowExec options to api [backport to v3] - by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10445 <samp>(af88b)</samp>cdp API when allowWrite/allowExec: false [backport to v3] - by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10456 <samp>(385a1)</samp>cdp API when allowWrite/allowExec: false [backport to v4] - by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10450 <samp>(e4067)</samp>ToMatchScreenshotResolvePath - by @macarie and @sheremet-va in https://github.com/vitest-dev/vitest/issues/10138 <samp>(31882)</samp>sequence.concurrent: true with top-level test(..., { concurrent: false }) + depreacte sequential test API and options - by @hi-ogawa, Codex and @sheremet-va in https://github.com/vitest-dev/vitest/issues/10196 <samp>(2847d)</samp>instrumenter option - by @BartWaardenburg and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/10119 <samp>(0e0ff)</samp>vi.defineHelper called as object method - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10163 <samp>(122c2)</samp>agent reporter to minimal - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10157 <samp>(663b9)</samp>skipFull if agent detected - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10018 <samp>(53757)</samp>assertion as a public field - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10095 <samp>(a120e)</samp>expect(..., message) consistent as error message prefix - by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10068 <samp>(a1b5f)</samp>experimental.preParse flag - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10070 <samp>(78273)</samp>browser.locators.exact option - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10013 <samp>(48799)</samp>TestAttachment.bodyEncoding - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9969 <samp>(89ca0)</samp>expect.poll interval - by @hi-ogawa and Claude Sonnet 4.6 in https://github.com/vitest-dev/vitest/issues/10022 <samp>(3f5bf)</samp>@vitest/coverage-v8 and @vitest/coverage-istanbul as optional dependency - by @alan-agius4 in https://github.com/vitest-dev/vitest/issues/10025 <samp>(146d4)</samp>defineHelper for webkit async stack trace + update playwright 1.59.0 - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10036 <samp>(5a5fa)</samp>JestExtendError.context from verbose error reporting - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9983 <samp>(66751)</samp>vitest - by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10042 <samp>(691d3)</samp>This release bumps Vitest's flatted version and removes version pinning to resolve flatted's CVE related issues (https://github.com/vitest-dev/vitest/issues/9975).
setupFiles from parent directory - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9960 <samp>(7aa93)</samp>toMatchScreenshot can't capture a stable screenshot - by @macarie in https://github.com/vitest-dev/vitest/issues/9847 <samp>(faace)</samp>coverageConfigDefaults values and types - by @Arthie in https://github.com/vitest-dev/vitest/issues/9940 <samp>(b3c99)</samp>matchesTags to test if the current filter matches tags - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9913 <samp>(eec53)</samp>experimental.vcsProvider - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9928 <samp>(56115)</samp>TestProject.testFilesList internal properly - by @sapphi-red in https://github.com/vitest-dev/vitest/issues/9867 <samp>(54f26)</samp>use - by @oilater in https://github.com/vitest-dev/vitest/issues/9831 and https://github.com/vitest-dev/vitest/issues/9861 <samp>(633ae)</samp>vi.advanceTimers to the preview provider - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9891 <samp>(1bc3e)</samp>--standalone mode without running tests - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9911 <samp>(e78ad)</samp>body - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9912 <samp>(6fdb2)</samp>retry.condition RegExp serialization issue - by @nstepien and @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9942 <samp>(7b605)</samp>test return as tests - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9871 <samp>(141e7)</samp>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.
setTickMode to timer controls - by @atscott and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8726 <samp>(4b480)</samp>toTestSpecification to reported tasks - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9464 <samp>(1a470)</samp>vi.mock or vi.hoisted are declared outside of top level of the module - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9387 <samp>(5db54)</samp>aroundEach and aroundAll hooks - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9450 <samp>(2a8cb)</samp>new or all in --update flag - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9543 <samp>(a5acf)</samp>meta in test options - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9535 <samp>(7d622)</samp>test.extend syntax - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9550 <samp>(e5385)</samp>vitest list to statically collect tests instead of running files to collect them - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9630 <samp>(7a8e7)</samp>--detect-async-leaks - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9528 <samp>(c594d)</samp>mockThrow and mockThrowOnce - by @thor-juhasz and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9512 <samp>(61917)</samp>update: "none" and add docs about snapshots behavior on CI - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9700 <samp>(05f18)</samp>launchOptions with connectOptions - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9702 <samp>(f0ff1)</samp>page/locator.mark API to enhance playwright trace - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9652 <samp>(d0ee5)</samp>test in experimental_parseSpecification - by @jgillick and Jeremy Gillick in https://github.com/vitest-dev/vitest/issues/9235 <samp>(2f367)</samp>createSpecification - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9336 <samp>(c8e6c)</samp>runTestFiles as alternative to runTestSpecifications - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9443 <samp>(43d76)</samp>allowWrite and allowExec options to api - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9350 <samp>(20e00)</samp>toTestSpecification - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9627 <samp>(6f17d)</samp>userEvent.wheel API - by @macarie in https://github.com/vitest-dev/vitest/issues/9188 <samp>(66080)</samp>filterNode option to prettyDOM for filtering browser assertion error output - by @Copilot, sheremet-va and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9475 <samp>(d3220)</samp>detailsPanelPosition option and button - by @shairez in https://github.com/vitest-dev/vitest/issues/9525 <samp>(c8a31)</samp>findElement and enable strict mode in webdriverio and preview - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9677 <samp>(c3f37)</samp>ignore start/stop ignore hints - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9204 <samp>(e59c9)</samp>coverage.changed option to report only changed files - by @kykim00 and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9521 <samp>(1d939)</samp>onModuleRunner hook to worker.init - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9286 <samp>(e977f)</samp>importDurations: { limit, print } options - by @hi-ogawa, Claude Opus 4.6 and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9401 <samp>(7e10f)</samp>importDurations - by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9533 <samp>(3f7a5)</samp>beforeAll/afterAll - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9572 <samp>(c8339)</samp>agent reporter to reduce ai agent token usage - by @cpojer in https://github.com/vitest-dev/vitest/issues/9779 <samp>(3e9e0)</samp>retry options - by @MazenSamehR, Matan Shavit, @AriPerkkio and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9370 <samp>(9e4cf)</samp>meta.url in createRequire - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9441 <samp>(e3422)</samp>external/noExternal during configEnvironment hook - by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9508 <samp>(59ea2)</samp>browser.isolate is used - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9410 <samp>(3d48e)</samp>vi.mock({ spy: true }) node v8 coverage - by @hi-ogawa, hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9541 <samp>(687b6)</samp>.name from statically collected test - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9596 <samp>(b66ff)</samp>expect.soft - by @iumehara, @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9231 <samp>(3eb2c)</samp>sequence.shuffle.tests is enabled - by @kaigritun, Kai Gritun and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9576 <samp>(8182b)</samp>expect/src/utils from vitest - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9616 <samp>(48739)</samp>--detect-async-leaks - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9638 <samp>(9fd4c)</samp>aroundEach/All when inner aroundEach/All throws - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9657 <samp>(4ec6c)</samp>aroundEach/All setup timed out - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9670 <samp>(bb013)</samp>VitestRunnerConfig optional fields with SerializedConfig - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9661 <samp>(79520)</samp>toBe* spy assertions in favor of toHaveBeen* (and toThrowError) - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9665 <samp>(4d390)</samp>aroundEach/All errors but aggregate them on runner - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9673 <samp>(b6365)</samp>resolves/rejects chained assertion error - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9679 <samp>(c6151)</samp>maxConcurrency - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9653 <samp>(16d13)</samp>resolve.conditions for externals - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9717 <samp>(1d498)</samp>mockObject change backwards compatible - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9744 <samp>(84c69)</samp>URL.name on jsdom - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9767 <samp>(031f3)</samp>vi.importActual() for virtual modules - by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9772 <samp>(1e89e)</samp>FixtureAccessError if suite hook accesses undefined fixture - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9786 <samp>(fc2ce)</samp>load or transform original module - by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9774 <samp>(a8216)</samp>hideSkippedTests should not hide test.todo - by @oilater in https://github.com/vitest-dev/vitest/issues/9562 and https://github.com/vitest-dev/vitest/issues/9781 <samp>(8181e)</samp>beforeEach hooks - by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9826 <samp>(99e52)</samp>performance.now to measure test timeout duration - by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9795 <samp>(f48a6)</samp>toMatchScreenshot passes - by @macarie in https://github.com/vitest-dev/vitest/issues/9289 <samp>(46aab)</samp>toMatchScreenshot - by @macarie in https://github.com/vitest-dev/vitest/issues/9552 <samp>(83ca0)</samp>--remote-debugging-address from chrome args - by @hi-ogawa and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9712 <samp>(f09bb)</samp>ensureAwaited - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9732 <samp>(97685)</samp>getCDPSession and cdp() - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9716 <samp>(689a2)</samp>deepEqual in the config because it's not serializable - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9666 <samp>(9ee99)</samp>thresholds.autoUpdate to preserve ending whitespace - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9436 <samp>(7e534)</samp>/config/#option hash links causing hydration errors - by @hi-ogawa, Claude Opus 4.6 and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9610 <samp>(a603c)</samp>toMatchObject(Map/Set) should expect Map/Set on left hand side - by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9532 <samp>(381da)</samp>toThrow and make Error detection robust - by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9570 <samp>(de215)</samp>dot reporter leaves pending tests - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9684 <samp>(4d793)</samp>undefined - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9511 <samp>(6f181)</samp>bench.reporters no longer gives type errors when passing file name string paths - by @Bertie690 in https://github.com/vitest-dev/vitest/issues/9695 <samp>(093c8)</samp>onModuleRunner hook to worker.init - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9286 <samp>(ea837)</samp>meta.url in createRequire - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9441 <samp>(e0572)</samp>addEventHandler #9371 - by @ThibautMarechal in https://github.com/vitest-dev/vitest/issues/9372 and https://github.com/vitest-dev/vitest/issues/9371 <samp>(40841)</samp>process.env and import.meta.env defines in inline project - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9239 <samp>(b70c9)</samp>ErrorEvent.message when unhandled ErrorEvent.error is null - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9322 <samp>(5d84e)</samp>fileParallelism on an instance - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9328 <samp>(15006)</samp>istanbul-lib-source-maps usage - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9344 <samp>(b0940)</samp>process.versions stub - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9174 <samp>(78cfb)</samp>test.poolOptions if it's set - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9226 <samp>(f7f6a)</samp>recordArtifact from the vitest package - by @macarie in https://github.com/vitest-dev/vitest/issues/9186 <samp>(01c56)</samp>import.meta.env define - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9205 <samp>(01a9a)</samp>setupEnvironment for custom pools - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9187 <samp>(5d26b)</samp>optimizeDeps.rolldownOptions to fix depreated warning + fix ssr.external: true - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9121 <samp>(fd8bd)</samp>deps.optimizer - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9125 <samp>(4c754)</samp>toMatchScreenshot only once when used with expect.element - by @macarie in https://github.com/vitest-dev/vitest/issues/9132 <samp>(0d2e7)</samp>--browser.provider from docs - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9115 <samp>(120b3)</samp>currentTestName in extended matchers - by @macarie in https://github.com/vitest-dev/vitest/issues/9106 <samp>(e4345)</samp>CTRL+c forceful exits - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9140 <samp>(d57d8)</samp>utils.configurePrettyDOM - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9103 <samp>(2cc34)</samp>toMatchScreenshot with comparison slider - by @macarie in https://github.com/vitest-dev/vitest/issues/8813 <samp>(c37c2)</samp>collect to import, remove prepare - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9091 <samp>(1256b)</samp>onCancel on rpc destroy - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9088 <samp>(f5b72)</samp>VITEST_POOL_ID + VITEST_WORKER_ID before environment setup - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9085 <samp>(37918)</samp>postMessage to send ports to workers - by @whitphx and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9078 <samp>(9d176)</samp>debug with obug - by @sxzz and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9057 <samp>(acc51)</samp>fsCacheModule is enabled, read from the memory when possible - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9076 <samp>(6b9a1)</samp>fsModuleCachePath by default - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9063 <samp>(9a8bc)</samp>@opentelemetry/api in public types - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9066 <samp>(e944a)</samp>task in MatchState - by @macarie in https://github.com/vitest-dev/vitest/issues/9022 <samp>(afd1f)</samp>onCancel when worker is terminated - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9033 <samp>(6d7f0)</samp>onFinished) - by @userquin in https://github.com/vitest-dev/vitest/issues/8975 <samp>(f56dc)</samp> 🐞 Bug Fixes - Correctly identify concurrent test during static analysis in older Vitest versions - by @shere…
Vitest · vscode 🚀 Features - Support deno runtime - by @sheremet-va in https://github.com/vitest-dev/vscode/issues/744 <samp…
Vitest · vscode