Skip to content
New issue

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

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

Already on GitHub? # 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
enhancement New feature or request environment Issue with the environment

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
@ph-fritsche ph-fritsche added enhancement New feature or request environment Issue with the environment and removed bug Something isn't working needs assessment This needs to be looked at by a team member labels Jan 13, 2025
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
enhancement New feature or request environment Issue with the environment
Projects
None yet
Development

No branches or pull requests

2 participants