fix(browser): cleanup keyboard state#6731
Conversation
✅ Deploy Preview for vitest-dev ready!Built without sensitive environment variables
To edit notification comments on pull requests, go to your Netlify site configuration. |
|
Maybe for per-test isolation we can provide a const test = base.extend({
userEvent: async ({}, use) => {
const user = userEvent.setup()
await use(user)
await user.cleanup()
},
})
test('my test', ({ userEvent }) => {
// ...
})I don't think we can use beforeEach(ctx => {
ctx.dynamicAssigment = true
})But we can maybe do it the same way we inject |
|
I didn't realize but I guess OP expected per-test isolation #6693 (comment) because |
85301a8 to
983ea44
Compare
|
I moved |
|
|
||
| export function createUserEvent(__tl_user_event__?: TestingLibraryUserEvent): UserEvent { | ||
| export function createUserEvent(__tl_user_event_base__?: TestingLibraryUserEvent): UserEvent { | ||
| let __tl_user_event__ = __tl_user_event_base__?.setup({}) |
There was a problem hiding this comment.
I don't understand why this is needed; the first argument is supposed to be called with setup() - see the setup method on L40
There was a problem hiding this comment.
Not sure if this what you're asking, but we need to pass around the original userEvent since this happens:
import { userEvent } from "@testing-library/user-event"
const userEvent1 = userEvent.setup();
userEvent1.keyboard("{Alt>}")
// userEvent1 and userEvent2 share the same keyboard state
const userEvent2 = userEvent1.setup();
userEvent2.keyboard("{Tab}") // altKey = true
// need to call original `userEvent.setup()` to have a fresh state
{
const userEvent1 = userEvent.setup();
userEvent1.keyboard("{Alt>}")
const userEvent2 = userEvent.setup();
userEvent2.keyboard("{Tab}") // altKey = false
}For L40, we should probably recurse it like createUserEvent(__tl_user_event_base__).
packages/browser/context.d.ts
Outdated
| * @see {@link https://vitest.dev/guide/browser/interactivity-api.html#userevent-setup} | ||
| */ | ||
| setup: () => UserEvent | ||
| cleanup: () => Promise<void>; |
There was a problem hiding this comment.
We need documentation for every public API - in jsdoc and vitest.dev
Hm, actually, our |
|
Good point. I thought it's trivial to move it to Btw, I thought I was using |
##### [v2.1.4](https://github.com/vitest-dev/vitest/releases/tag/v2.1.4) ##### 🚀 Features - **browser**: Allow custom HTML path, respect plugins `transformIndexHtml` - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6725 [<samp>(16902)</samp>](vitest-dev/vitest@169028f0) ##### 🐞 Bug Fixes - Don't normalize drive case letter in root - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6792 [<samp>(b28cd)</samp>](vitest-dev/vitest@b28cd2e3) - **browser**: - Fix default browser port - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6700 [<samp>(9c518)</samp>](vitest-dev/vitest@9c518c14) - Optimize expect-type - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6713 [<samp>(07918)</samp>](vitest-dev/vitest@07918538) - Don't polyfill process.env - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6718 [<samp>(da6d2)</samp>](vitest-dev/vitest@da6d2ea7) - Increment browser port automatically if there are several projects with browser.enabled - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6717 [<samp>(a9397)</samp>](vitest-dev/vitest@a939779f) - Cleanup keyboard state - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6731 [<samp>(19278)</samp>](vitest-dev/vitest@19278f4c) - Don't add `v=` queries to setup files imports - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6759 [<samp>(b8258)</samp>](vitest-dev/vitest@b82584c9) - User event cleanup on retry - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6764 [<samp>(bdd15)</samp>](vitest-dev/vitest@bdd15dd1) - Ignore non mocked msw requests - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6770 [<samp>(9d9ba)</samp>](vitest-dev/vitest@9d9bad5b) - Initiate MSW in the same frame as tests - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6772 [<samp>(2444f)</samp>](vitest-dev/vitest@2444ff22) - **deps**: - Update dependency sirv to v3 - in vitest-dev/vitest#6701 [<samp>(fde5d)</samp>](vitest-dev/vitest@fde5d509) - **expect**: - Correct behavior of `toThrowError` with empty string parameter - by [@shulaoda](https://github.com/shulaoda) in vitest-dev/vitest#6710 [<samp>(a6129)</samp>](vitest-dev/vitest@a61293e9) - **mocker**: - Remove spy from peer dependencies - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6777 [<samp>(3a8b5)</samp>](vitest-dev/vitest@3a8b56bf) - **vitest**: - Clarify slowTestThreshold, print slow tests in non-TTY mode - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6715 [<samp>(2e6aa)</samp>](vitest-dev/vitest@2e6aa647) - Print warnings form Vite plugins - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6724 [<samp>(121b1)</samp>](vitest-dev/vitest@121b161f) - Don't fail if the working directory starts with a lowercase drive letter - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6779 [<samp>(df6d7)</samp>](vitest-dev/vitest@df6d750b) - Silence import analysis warning - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6785 [<samp>(39041)</samp>](vitest-dev/vitest@39041ee5) - **vitest,runner**: - Simplify `test.extend` type exports - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6707 [<samp>(e5c38)</samp>](vitest-dev/vitest@e5c388f0) ##### 🏎 Performance - Use `hash` to replace `createHash` - by [@btea](https://github.com/btea) in vitest-dev/vitest#6703 [<samp>(5d07b)</samp>](vitest-dev/vitest@5d07bba6) ##### [View changes on GitHub](vitest-dev/vitest@v2.1.3...v2.1.4)
Description
I added
userEvent.cleanupto reset keyboard state and hooked intotester cleanuprunneronAfterRunTask.Please 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:.