Properly Testing Button Clicks in React Testing Library

Ferenc Almasi β€’ 2022 September 03 β€’ πŸ“– 1 min read
  • twitter
  • facebook

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.

  • twitter
  • facebook
Did you find this page helpful?
πŸ“š More Webtips
Frontend Course Dashboard
Master the Art of Frontend
  • check Unlimited access to hundred of tutorials
  • check Access to exclusive interactive lessons
  • check Remove ads to learn without distractions
Become a Pro

Recommended