Vitest 3 is here! There are a few breaking changes, but we expect the migration to be smooth. This release page lists all changes made to the project during the beta. For the migration guide, please refer to the documentation.
🚨 Breaking Changes
spy.mockReset
changes - by @Lordfirespeed in #6426 (db7a8)- Pass down context to test hooks - by @sheremet-va in #7034 (82c2e)
- Support Vite 6 - by @sheremet-va in #7026 (7abe8)
- coverage: Always exclude test files - by @AriPerkkio in #7254 (b5268)
- deps: Update fake-timers to v14.0.0 - by @xxzefgh and @hi-ogawa in #7097 (c98b4)
- expect: Check more properties for error equality - by @hi-ogawa and @sheremet-va in #5876 (10023)
- runner: Support
describe(..., { shuffle: boolean })
and inherit from parent suite - by @hi-ogawa in #6670 (aa1da) - snapshot: Reset snapshot state for
retry
andrepeats
- by @hi-ogawa in #6817 (e8ce9) - spy: SpyOn reuses mock if method is already spyed on - by @sheremet-va and @hi-ogawa in #6464 (b3e43)
- vitest: Don't expose default toFake config - by @sheremet-va in #6288 (e3144)
🚀 Features
- Support inline
diff
options and supportprintBasicPrototype
- by @hi-ogawa, @sheremet-va and Michał Grzegorzewski in #6740 (39186) - Allow a custom note when calling
ctx.skip()
dynamically - by @sheremet-va in #6805 (697c3) - Allow inline workspace configuration - by @sheremet-va in #6923 (562e1)
- Provide the current project to the global setup - by @sheremet-va in #6942 (a5bbc)
- Print project name as a label - by @sheremet-va in #6925 (a3bef)
- Print a deprecation warning if suite or test uses object as the third argument - by @sheremet-va in #7031 (407f1)
- Expose versions from
vitest/node
entry point and statically on Vitest - by @sheremet-va in #7029 (be8d4) diff.printBasicPrototype: false
by default - by @hi-ogawa in #7043 (2b5c5)- Prepare the Vitest API to be stable - by @sheremet-va in #6962 (9a1b5)
- Support Vite v6 in mocker package - by @cexbrayat in #7058 (96f47)
- Allow multi-browser configuration - by @sheremet-va in #6975 (78b62)
- Add resolved project names to the reporter API - by @userquin in #7213 (91758)
- Introduce the new reporter API - by @sheremet-va and @AriPerkkio in #7069 (76662)
- Add
describe.for
- by @hi-ogawa in #7253 (0ad28) - api:
- Add onBrowserInit event - by @sheremet-va in #7255 (80ce0)
- browser:
- cli:
- coverage:
thresholds
to support maximum uncovered items - by @jonahkagan in #7061 (bde98)
- expect:
- Add
toHaveBeenCalledExactlyOnceWith
expect matcher - by @jacoberdman2147 and @sheremet-va in #6894 (ff662) - Add
toHaveBeenCalledAfter
andtoHaveBeenCalledBefore
utility - by @Barbapapazes and @sheremet-va in #6056 (85e6f) - Add
toSatisfy
asymmetric matcher - by @hi-ogawa in #7022 (f691a) - Add
toBeOneOf
matcher - by @zirkelc and @hi-ogawa in #6974 (3d742)
- Add
- reporter:
- Add support for function type to classname option in the junit reporter - by @jpleclerc, Jean-Philippe Leclerc and @hi-ogawa in #6839 (dc238)
- reporters:
summary
option forverbose
anddefault
reporters - by @AriPerkkio in #6893 (511b7)
- runner:
- Test context can inject values from the config's
provide
- by @sheremet-va in #6813 (85c64) - Add "queued" state - by @sheremet-va and @AriPerkkio in #6931 (5f8d2)
- Test context can inject values from the config's
- snapshot:
- ui:
- Allow run individual tests/suites from the UI - by @userquin in #6641 (d9cc8)
- Make clicking on a test in the UI open the report section and scroll to the test failure if applicable - by @jacoberdman2147 in #6900 (1bf27)
- Allow hide/show node_modules in module graph tab - by @userquin in #7217 (50cf6)
- vitest:
- Include
coverageMap
in json report - by @sheremet-va in #6606 (9c8f7) - Add
onTestsRerun
method to global setup context - by @sheremet-va in #6803 (e26e0)
- Include
🐞 Bug Fixes
- Misc fix for vite 6 ecosystem ci - by @hi-ogawa in #6867 (80f8b)
- Respect
cacheDir
when optimizer is enabled - by @hi-ogawa in #6910 (0b08b) - Reset runningPromise after
finally
in case there is an error to avoid it getting stuck - by @sheremet-va in #6951 (02194) - Revert support for Vite 6 - by @sheremet-va (fbe5c)
- Support Node 21 - by @sheremet-va (92f7a)
- Don't use
Custom
internally - by @sheremet-va (46fc5) - Don't use
Custom
internally" - by @sheremet-va (db19f) - Don't use
Custom
type internally - by @sheremet-va in #7032 (7957f) - Persist cli filters as watch mode file filter - by @hi-ogawa in #6955 (cc703)
- Don't use dim color for succeeded tests - by @sheremet-va in #7059 (8a6f5)
- Fix missing chai types - by @hi-ogawa in #7149 (6a09c)
cancelCurrentRun
awaitsrunningPromise
- by @sheremet-va in #7168 (1dbf5)- Add Locator typings for nth, first and last. - by @xeger in #7176 (d262e)
- Batch console logs by microtask - by @hi-ogawa in #7183 (53d1d)
- Allow
getMockImplementation
to return "once" implementation - by @chaptergy in #7033 (39125) capturePrintError
logger duplicate event handlers - by @hi-ogawa in #7197 (e89c3)- Allow slots in vitest-browser-vue - by @sheremet-va in #7120 (2319f)
- Reset root workspace project on restart - by @sheremet-va in #7238 (6e518)
- Cleanup
vitest/reporters
entrypoint - by @sheremet-va in #7241 (aec0b) - Colors on
forks
pool - by @AriPerkkio in #7090 (8cab9) - Export
VitestRunner
type fromvitest/runners
- by @sheremet-va in #7240 (9b218) - Return test fn result to runner - by @wmertens in #7239 (48645)
- Re-apply default conditions if using vite 6 or later - by @thebanjomatic, thebanjomatic and @hi-ogawa in #7071 (84287)
- Prevent infinite loop on prettyDOM calls - by @tsirlucas in #7250 (a3a46)
- api:
- Don't report events during
vitest list
- by @sheremet-va in #7257 (1c2b2)
- Don't report events during
- benchmark:
- Disable type testing while benchmarking - by @AriPerkkio in #7068 (4e603)
- Rewrite reporter without
log-update
- by @AriPerkkio in #7019 (6d23f)
- browser:
- Improve source maps when
vi.mock
is present - by @sheremet-va in #6810 (8d179) - Explain TypeScript support in docs and add asymmetric matchers to types - by @sheremet-va in #6934 (ac1a7)
- Fix matchers.d.ts - by @hi-ogawa in #6995 (a485b)
- Fix user event state on preview provider - by @hi-ogawa in #7041 (8e944)
- Fix provider options types - by @hi-ogawa in #7115 (579bd)
- Only use locator.element on last expect.element attempt - by @tsirlucas in #7139 and #7152 (847d3)
- Use correct project when filtering
entries
in the browser mode - by @sheremet-va in #7167 (423d6) - Fix
console.time
with fake timers - by @hi-ogawa in #7207 (903f3) - Add instance validation to resolve coverage error - by @DevJoaoLopes and @AriPerkkio in #7231 (1e791)
- Improve source maps when
- coverage:
- Exclude browser mode iframe results - by @AriPerkkio in #6905 (e04a1)
- Correct coverage when
isolate: false
is used - by @AriPerkkio in #6957 (426ce) - Prevent crash when v8 incorrectly merges static_initializer's - by @AriPerkkio in #7150 (cb6db)
- deps:
- diff:
- junit:
- Fix testsuites time to be sum of all testsuite items - by @saitonakamura in #6985 (ca37a)
- pretty-format:
- reporters:
- Write buffered stdout/stderr on process exit - by @AriPerkkio in #6932 (80cde)
- Rewrite
dot
reporter withoutlog-update
- by @AriPerkkio in #6943 (be969) - Check
--hideSkippedTests
in base reporter - by @AriPerkkio in #6988 (721a5) - Show
retry
andrepeats
counts - by @AriPerkkio and @hi-ogawa in #7004 (3496a)
- runner:
- Long synchronous tasks does not time out - by @ferdodo and @sheremet-va in #2920 and #6944 (2fb58)
- Mark tests of
describe.todo
as'todo'
- by @AriPerkkio in #7171 (1d458)
- snapshot:
- typecheck:
- types:
- Make parameters non-nullable for Playwright options - by @apple-yagi in #6989 (fe2a1)
- ui:
- vite-node:
- watch:
- Don't indicate exit when no matching files - by @sheremet-va and @AriPerkkio in #7246 (003c0)
- workspace:
extends: true
correctly inherits all root config properties - by @sheremet-va in #7232 (798c0)