import { fireEvent, render, screen } from '@testing-library/react'; import { createMemoryHistory } from 'history'; import { Router } from 'react-router-dom'; import RouteTab from './index'; import { RouteTabProps } from './types'; function DummyComponent1(): JSX.Element { return
Dummy Component 1
; } function DummyComponent2(): JSX.Element { return
Dummy Component 2
; } const testRoutes: RouteTabProps['routes'] = [ { name: 'Tab1', route: '/tab1', Component: DummyComponent1, key: 'Tab1', }, { name: 'Tab2', route: '/tab2', Component: DummyComponent2, key: 'Tab2', }, ]; describe('RouteTab component', () => { test('renders correctly', () => { const history = createMemoryHistory(); render( , ); expect(screen.getByRole('tab', { name: 'Tab1' })).toBeInTheDocument(); expect(screen.getByRole('tab', { name: 'Tab2' })).toBeInTheDocument(); }); test('renders correct number of tabs', () => { const history = createMemoryHistory(); render( , ); const tabs = screen.getAllByRole('tab'); expect(tabs.length).toBe(testRoutes.length); }); test('sets provided activeKey as active tab', () => { const history = createMemoryHistory(); render( , ); expect( screen.getByRole('tab', { name: 'Tab2', selected: true }), ).toBeInTheDocument(); }); test('navigates to correct route on tab click', () => { const history = createMemoryHistory(); render( , ); expect(history.location.pathname).toBe('/'); fireEvent.click(screen.getByRole('tab', { name: 'Tab2' })); expect(history.location.pathname).toBe('/tab2'); }); test('calls onChangeHandler on tab change', () => { const onChangeHandler = jest.fn(); const history = createMemoryHistory(); render( , ); fireEvent.click(screen.getByRole('tab', { name: 'Tab2' })); expect(onChangeHandler).toHaveBeenCalled(); }); });