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()
})
Copied to clipboard!
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.
π More Webtips
Master the Art of Frontend
Unlimited access to hundred of tutorials
Access to exclusive interactive lessons
Remove ads to learn without distractions