Testing Disabled Buttons in React Testing Library
To test whether your buttons are disabled or not in React Testing Library, you need to use the toHaveAttribute
or the toBeDisabled
assertion in the following way:
import { render, screen } from '@testing-library/react'
it('should render a disabled button', () => {
render(<Cta disabled={true}>Learn more!</Cta>)
expect(screen.getByTestId('button')).toHaveAttribute('disabled')
expect(screen.getByTestId('button')).toBeDisabled()
})
toHaveAttribute
also accepts a second parameter for the value if you need to test specific attribute values.
Prefer using getByTestId
to avoid breaking your unit tests by small code changes. You can also test the opposite and verify if your buttons are not disabled by prepending a not
to either of the assertions:
import { render, screen } from '@testing-library/react'
it('should render a disabled button', () => {
render(<Cta>Learn more!</Cta>)
expect(screen.getByTestId('button')).not.toHaveAttribute('disabled')
expect(screen.getByTestId('button')).not.toBeDisabled()
})

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
