[Dropdown Menu] On NextJS, `userEvent.click` on `button` during `Jest` / `React Testing Library` tests doesn't seem to open menu
See original GitHub issueBug report
Current Behavior
From my understanding, it seems that trying to trigger a click on the DropdownMenu.Trigger on the tests isn’t actually working.
Running the following test
test('Dropdown trigger gets clicked and menu opens', async () => {
render(<Dropdown
chosenOption={undefined}
label={label}
options={dropdownOptions}
placeholder={placeholder}
setOption={() => jest.fn()}
/>)
userEvent.click(screen.getByRole('button'))
expect(await screen.findByText('Option 1')).toBeInTheDocument()
})
Gets me the following errors on the terminal
TypeError: _observer.disconnect is not a function
Error: Uncaught [TypeError: _observer.disconnect is not a function]
at reportException (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js:66:24)
at innerInvokeEventListeners (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:343:9)
at invokeEventListeners (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:276:3)
at HTMLUnknownElementImpl._dispatch (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:223:9)
at HTMLUnknownElementImpl.dispatchEvent (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:94:17)
at HTMLUnknownElement.dispatchEvent (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:241:34)
at Object.invokeGuardedCallbackDev (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:4213:16)
at invokeGuardedCallback (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:4277:31)
at reportUncaughtErrorInDEV (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:22838:5)
at captureCommitPhaseError (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:27126:5) {
detail: TypeError: _observer.disconnect is not a function
at Object.current (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/@floating-ui/dom/dist/floating-ui.dom.umd.js:583:59)
at /Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js:168:20
at /Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js:187:7
at safelyDetachRef (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:22913:20)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24003:11)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24170:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24170:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24170:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24170:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24170:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24170:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24170:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5)
at commitDeletionEffectsOnFiber (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:24118:9)
at recursivelyTraverseDeletionEffects (/Users/ruisousa/Desktop/Dev/X/dashboard/node_modules/react-dom/cjs/react-dom.development.js:23989:5),
type: 'unhandled exception'
}
at VirtualConsole.<anonymous> (node_modules/jest-environment-jsdom/build/index.js:70:23)
at reportException (node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js:70:28)
at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:343:9)
at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:276:3)
at HTMLUnknownElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:223:9)
at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:94:17)
I previously had this issue using CRA and got a solution in this issue but now I’m working with NextJS and I expected for the issue to be the same.
Expected behavior
As with the CRA tests, I expected to target the button, click it, and be able to find the menu during the tests
Reproducible example
https://codesandbox.io/s/dropdown-menu-tests-gbyng1?file=/components/Dropdown/dropdown.test.tsx
Suggested solution
No idea on what might be happening
Additional context
Nothing to add here
Your environment
| Software | Name(s) | Version |
|---|---|---|
| Radix Package(s) | @radix-ui/react-dropdown-menu |
1.0.0 |
| React | n/a | 18.2.0 |
| Browser | - | - |
| Assistive tech | - | - |
| Node | n/a | v18.0.0 |
| npm/yarn | yarn | 1.22.19 |
| Operating System | MacOS Montery | 12.3.1 |
Issue Analytics
- State:
- Created a year ago
- Comments:7
Top Results From Across the Web
userEvent in React Testing Library Doesn't Cause onClick To ...
However, the test is currently failing because the function isn't being called. Here's the code: import React from 'react'; import { render, screen...
Read more >Async Methods - Testing Library
Several utilities are provided for dealing with asynchronous code. These can be useful to wait for an element to appear or disappear in...
Read more >Testing React Applications | Curiosum
Jest is a test runner, which runs your code in an isolated environment outside of the browser. React Testing Library is a handy...
Read more >Testing | Next.js
Learn how to set up Next.js with three commonly used testing tools — Cypress, Playwright, Jest, and React Testing Library.
Read more >How To Test a React App with Jest and React Testing Library
Obtaining solid test coverage is imperative for building confidence in your web application. In this tutorial, you will test asynchronous ...
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found

Hi @ItzaMi ,
This is due to a combination of changes, one is that
user-eventv14 is shipped in the latest next/jest starter and Radix moved tofloating-uiin the v1 release.Providing you’re using the next starter and Radix v1, here are the modifications you need to make:
Ensure your tests conform to the
user-eventv14 api, specifically the recommendation for callinguserEvent.setup(), it looks like this is handled internally as well (given your example test) but I’m adding it below for completeness:The main problem in your case though is that the
ResizeObservermock has omitted thedisconnectmethod, this is now required byfloating-uiso adding that to the mock should fix your error.I have trouble with sandboxed
nextenvironments on CSB so I hope this explanation helps in place.I’m going to close this now as I’ve tested this locally and seems to work well, please follow up if you still have issues though.
Thank you, @andy-hook . You saved me once again with the clutch 😄 Indeed I didn’t have to setup the
userEventand the following sufficed!