import React from 'react'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { Select } from './Select'; describe('Select', () => { const options = [ { value: 'foo', label: 'Foo' }, { value: 'bar', label: 'Bar' }, { value: 'baz', label: 'Baz', disabled: true } ]; it('renders correctly', () => { const { container } = render( ' ); }); it('expands when clicked', async () => { const { container } = render(
' ); }); it('does not expand on click when disabled', async () => { const { container } = render( ' ); }); it('calls onChange when selecting an option', async () => { const onChange = jest.fn(); render( ); const button = screen.getByRole('button', { name: /Sort by/ }); await userEvent.click(button); const option = screen.getByRole('option', { name: 'Baz' }); await userEvent.click(option); expect(onChange).not.toHaveBeenCalled(); }); it('renders correctly with ":" between label and value if value is not undefined', async () => { const { container } = render( ' ); }); it('closes dropdown and returns focus to button when Escape is pressed', async () => { render(); const button = screen.getByRole('button', { name: 'Select an option' }); await userEvent.click(button); const option = screen.getByRole('option', { name: 'Bar' }); await userEvent.click(option); expect(container.innerHTML).toEqual( '
' ); }); });