import React, { ReactNode, ReactElement } from 'react'; import { fireEvent } from '@testing-library/react'; import renderWithTheme from '../../../testUtils/renderWithTheme'; import Button from '..'; const LinkButton = Button.Link; jest.mock('react-router-dom', () => ({ Link: function Link({ children, to, }: { children: ReactNode; to: string; }): ReactElement { return ( <>
{`Dom router link: ${to}`}
{children}
); }, })); describe('rendering', () => { it('renders link with correct href', () => { const { getByText } = renderWithTheme( ); expect(getByText('A LinkButton')).toBeInTheDocument(); expect(getByText('A LinkButton')).toHaveAttribute('href', '/#'); }); it('renders no icon by default', () => { const { container } = renderWithTheme( ); expect(container.querySelectorAll('i')).toHaveLength(0); }); it('renders icon', () => { const { container } = renderWithTheme( ); expect(container.querySelectorAll('i')).toHaveLength(1); }); it('renders right icon', () => { const { container } = renderWithTheme( ); expect(container.querySelectorAll('i')).toHaveLength(1); }); it('renders router link', () => { const { getByText } = renderWithTheme( ); expect(getByText('A LinkButton')).toBeInTheDocument(); expect(getByText('Dom router link: /#')).toBeInTheDocument(); }); }); describe('interaction', () => { it('allows to click on', () => { const onClick = jest.fn(); const { getByText } = renderWithTheme( ); fireEvent.click(getByText('A LinkButton')); expect(onClick).toHaveBeenCalledTimes(1); }); });