import { render, screen } from '@testing-library/react'; import { Histogram } from '..'; import useSize from '../../hooks/useSize'; jest.mock('../../hooks/useSize', () => jest.fn()); (useSize as jest.Mock).mockImplementation(() => [{ width: 250, height: 100 }]); describe('Histogram component', () => { it('should render when nBins prop is provided and with the correct number of bins', () => { const { asFragment } = render( ); expect(asFragment()).toMatchSnapshot(); expect(screen.getAllByTestId('histogram-bar')).toHaveLength(2); expect(screen.getByText('x axis')).toBeInTheDocument(); expect(screen.getByText('y axis')).toBeInTheDocument(); }); it('should render without axes if no label provided', () => { const { asFragment } = render( ); expect(asFragment()).toMatchSnapshot(); expect(screen.getAllByTestId('histogram-bar')).toHaveLength(2); expect(screen.queryByText('x axis')).not.toBeInTheDocument(); expect(screen.queryByText('y axis')).not.toBeInTheDocument(); }); it('should render when binSize prop is provided and with the correct number of bins', () => { const { asFragment } = render( ); expect(asFragment()).toMatchSnapshot(); expect(screen.getAllByTestId('histogram-bar')).toHaveLength(5); }); it('should shade bins that are in range', () => { render( ); const bars = screen.getAllByTestId('histogram-bar'); expect( bars.filter((bar) => bar.classList.contains('histogram__bar--within-range') ) ).toHaveLength(3); }); });