import React, { ReactElement } from 'react'; import { fireEvent, waitFor } from '@testing-library/react'; import { act } from 'react-dom/test-utils'; import renderWithTheme from '../../../testUtils/renderWithTheme'; import Dropdown from '..'; import Menu from '../../Menu'; import Button from '../../Button'; const DropdownButton = (): ReactElement => { const [open, setOpen] = React.useState(false); const content = ( ); return ( setOpen(!open)} />} onClose={(): void => setOpen(false)} /> ); }; describe('rendering', () => { it('hide dropdown content at first', async () => { const { queryByText } = renderWithTheme(); await waitFor(() => { expect(queryByText('Click me!')).toBeInTheDocument(); expect(queryByText('Item 1')).not.toBeInTheDocument(); expect(queryByText('Item 2')).not.toBeInTheDocument(); }); }); }); describe('interaction', () => { it('allows to toggle dropdown content', async () => { const { queryByText, getByText } = renderWithTheme(); expect(queryByText('Item 1')).not.toBeInTheDocument(); expect(queryByText('Item 2')).not.toBeInTheDocument(); await act(async () => { fireEvent.click(getByText('Click me!')); }); expect(queryByText('Item 1')).toBeInTheDocument(); expect(queryByText('Item 2')).toBeInTheDocument(); await act(async () => { fireEvent.click(getByText('Click me!')); }); expect(queryByText('Item 1')).not.toBeInTheDocument(); expect(queryByText('Item 2')).not.toBeInTheDocument(); }); });