Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clipboard stub state is not reset in Vitest (or any runner without globals) #1232

Open
mcous opened this issue Aug 21, 2024 · 0 comments
Open
Labels
bug Something isn't working needs assessment This needs to be looked at by a team member

Comments

@mcous
Copy link

mcous commented Aug 21, 2024

Reproduction example

https://codesandbox.io/p/github/mcous/user-event-clipboard-leak/main?import=true

Prerequisites

  1. Configure Vitest in non-globals mode (the default)
  2. Call userEvent.setup() in a test
  3. Copy something to the clipboard in a test
  4. Inspect the clipboard in a later test

Expected behavior

Clipboard state should be reset between tests, or there should be a documented way to add that clipboard cleanup to one's suite.

Without globals mode, I see a couple possible solutions. Adding one or both of these would be appropriate, I think:

  1. The module should export cleanup functions from the root (like other @testing-library modules) so a user can add cleanup to their test hooks manually
  2. Calling userEvent.setup should reset clipboard stub state

Actual behavior

  • Clipboard stub state is retained between tests

User-event version

14.5.2

Environment

No response

Additional context

Let me know if you need any assistance resolving this bug! I maintain @testing-library/svelte and I'm happy to jump in here, too, if it's helpful

As a workaround - since I'm not willing to enable globals mode - I am currently adding this to my global test setup file. It's not pretty, obvious, nor documented, so it would be nice if user-event could provide a blessed way to do this in Vitest

import { afterAll, afterEach } from 'vitest';
import {
  detachClipboardStubFromView,
  resetClipboardStubOnView,
} from '@testing-library/user-event/dist/esm/utils/dataTransfer/Clipboard.js';

afterEach(() => {
  resetClipboardStubOnView(window);
});

afterAll(() => {
  detachClipboardStubFromView(window);
});
@mcous mcous added bug Something isn't working needs assessment This needs to be looked at by a team member labels Aug 21, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working needs assessment This needs to be looked at by a team member
Projects
None yet
Development

No branches or pull requests

1 participant