import * as React from 'react' import { render, screen, fireEvent, waitFor } from '@testing-library/react' import '@testing-library/jest-dom' import { CDropdown, CDropdownToggle, CDropdownMenu, CDropdownItem, CDropdownItemPlain, CDropdownHeader, CDropdownDivider, } from '../index' test('loads and displays CDropdown component', async () => { const { container } = render(Test) expect(container).toMatchSnapshot() }) test('CDropdown customize', async () => { const { container } = render( Test ) expect(container).toMatchSnapshot() expect(container.firstChild).toHaveClass('bazinga') expect(container.firstChild).toHaveClass('nav-item') expect(container.firstChild).toHaveClass('dropdown') expect(container.firstChild).toHaveClass('dropstart') }) // test('CDropdown change visible prop', async () => { // jest.useFakeTimers() // const { rerender } = render(Test) // expect(screen.getByText('Test')).not.toHaveClass('show') // rerender(Test) // jest.runAllTimers() // expect(screen.getByText('Test')).toHaveClass('show') // rerender(Test) // expect(screen.getByText('Test')).not.toHaveClass('show') // jest.runAllTimers() // jest.useRealTimers() // }) test('CDropdown opens on toggle click and closes on clicking outside', async () => { render(
{/* External element to simulate clicking outside the dropdown */}
External Area
{/* The dropdown component */} Test A B
) // Ensure the dropdown is initially closed const toggleButton = screen.getByText('Test') expect(toggleButton).toBeInTheDocument() // Assuming the 'show' class is applied to the CDropdownMenu const dropdownMenu = screen.getByRole('menu', { hidden: true }) // Adjust role if different expect(dropdownMenu).not.toHaveClass('show') // Click on the toggle to open the dropdown fireEvent.click(toggleButton) // Wait for the dropdown menu to become visible await waitFor(() => { const openedMenu = screen.getByRole('menu') // Adjust role if different expect(openedMenu).toBeVisible() expect(openedMenu).toHaveClass('show') }) // Click outside the dropdown to close it const externalArea = screen.getByTestId('external-area') fireEvent.click(externalArea) // Wait for the dropdown menu to be hidden await waitFor(() => { const closedMenu = screen.getByRole('menu', { hidden: true }) // Adjust role if different expect(closedMenu).not.toHaveClass('show') }) }) test('CDropdown example', async () => { jest.useFakeTimers() const { container } = render( Test A B C D ) expect(container).toMatchSnapshot() })