testing-library / testing-library/user-event

userEvent.setup() exists but I'm unable to call it

Open
#1,279 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

docs enhancement
Dominant language
TypeScript
Stars
2.3k
Forks
258
PR merge metrics
No merged PRs in 30d

Description

Reproduction example
import { describe, expect, it } from "vitest";
import userEvent from "@testing-library/user-event";

describe("my test", () => {
  it("should pass", () => {
    console.log(userEvent.setup);
    userEvent.setup();     // <-- fails here
    expect(true).toBe(true);
  });
});

https://github.com/nene/test-userevent

Prerequisites

Sorry, I don't know how to work with tests in codesandbox. Instead I provide a repository:

  1. Check out the repo git clone git@github.com:nene/test-userevent.git
  2. Install dependencies with npm install
  3. Run tests npm test
Expected behavior

Tests execute successfully.

Actual behavior

An error occurs:

 FAIL  src/my.test.ts > my test > should pass
TypeError: Cannot read properties of undefined (reading 'Symbol(Node prepared with document state workarounds)')
 ❯ prepareDocument node_modules/@testing-library/user-event/dist/esm/document/prepareDocument.js:10:17
 ❯ Object.setupMain [as setup] node_modules/@testing-library/user-event/dist/esm/setup/setup.js:52:5
 ❯ src/my.test.ts:7:15
      5|   it("should pass", () => {
      6|     console.log(userEvent.setup);
      7|     userEvent.setup();
       |               ^
      8|     expect(true).toBe(true);
      9|   });
User-event version

14.6.1

Environment

Testing Library framework: @testing-library/dom 10.4.0

JS framework: react 18.3.1 (though not used in test)

Test environment: vitest 3.0.8

DOM implementation: Not sure, Vitest docs say that the default environment is node. I haven't installed any of the optional environments like js-dom or happy-dom.

Additional context

This problem looks similar to #839, but that issue has been fixed, and the workarounds suggested there didn't seem to do anything.

Most strangely, when I console.log(userEvent.setup) it prints:

[Function: setupMain]

Similarly typeof userEvent.setup also tells me that it's a function.

But when I call the function userEvent.setup() I get the error.

I managed to locate this strange Symbol(Node prepared with document state workarounds) inside user-event library. But I have no clue what's going on with that.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by cloning nene/test-userevent, installing dependencies, and running npm test to reproduce the failure in src/my.test.ts. Then inspect src/document/prepareDocument.ts at the linked Symbol reference and the reported stack frames; done means the setup call has an established expected behavior in the documented Vitest environment and the regression is covered or clearly explained.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
testing
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.