feat: automatically advance fake timers in Vitest #1304
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds automatic detection of fake timers from both Jest and Vitest, eliminating the need for users to manually configure
advanceTimers
when usingvi.useFakeTimers()
orjest.useFakeTimers()
.Fixes #1115
Problem
When using Vitest with fake timers,
userEvent
would timeout because it wasn't advancing the fake timers. Users had to use workarounds like:This happened because
userEvent
only knew about Jest's timer APIs, not Vitest's.Solution
Automatic detection of both Jest and Vitest fake timers:
timerDetection.ts
utility - Detects which testing framework's fake timers are active by checking forglobalThis.jest
orglobalThis.vi
wait.ts
- WhenadvanceTimers
isn't manually configured, automatically detects and uses the appropriate timer advancement functionWhen both Jest and Vitest globals are present (unlikely but possible), Jest takes precedence. This maintains consistency with existing behavior.
Before
After