Properly Testing Button Clicks in React Testing Library
In order to test button click events in React Testing Library, we need to use the fireEvent
API:
import { fireEvent, render, screen } from '@testing-library/react'
it('Should expand and collapse an accordion', () => {
render(<Accordion>Content</Accordion>)
// Prefer using getByTestId or getByRole
const button = screen.getByTestId('accordionButton')
const button = screen.getByRole('button')
const button = screen.getByText('Collapse')
expect(screen.queryByText('Content')).toBeNull()
fireEvent.click(button)
expect(screen.getByText('Content')).toBeInTheDocument()
fireEvent.click(button)
expect(screen.queryByText('My Content')).toBeNull()
})
Once you have the rendered component, you will need to grab the button using screen.getByTestId
. you can also use other methods such as getByRole
or getByText
, but preferably, you want to use getByTestId
to avoid breaking your test cases by changing the copy.
Then you can call fireEvent.click
and pass the queried button to simulate a click event. Notice that you can fire the same event multiple times. In the above example, we try to verify if the accordion can be opened and closed with two different click events.

Tired of looking for tutorials?
You are not alone. Webtips has more than 400 tutorials which would take roughly 75 hours to read.
Check out our interactive course to master JavaScript in less time.
Learn MoreRecommended

How to Save Writable Store in Svelte to Local Storage
Learn how to create a persistent store in Svelte

How to Create an Infinite Scroll Component in React
With the help of the Intersection Observer API
