import { setupJestCanvasMock } from 'jest-canvas-mock'; import { render, screen } from '@testing-library/react'; import { Charts } from '../../Charts'; import * as echarts from 'echarts/core'; import { LineChart } from 'echarts/charts'; import { GridComponent, TitleComponent, TooltipComponent } from 'echarts/components'; import { SVGRenderer } from 'echarts/renderers'; // Register required components echarts.use([GridComponent, LineChart, SVGRenderer, TitleComponent, TooltipComponent]); beforeEach(() => { jest.resetAllMocks(); jest.mock('echarts'); setupJestCanvasMock(); }); const props: any = { height: 400, id: 'line-chart', option: { xAxis: { type: 'category', data: ['2015', '2016', '2017', '2018'] }, yAxis: { axisLabel: { formatter: (value) => (value !== 0 ? `${value}` : '') }, splitNumber: 3, type: 'value' }, series: [ { data: [1, 2, 5, 3], name: 'Cats', type: 'line' }, { data: [2, 1, 7, 4], name: 'Dogs', lineStyle: { type: 'dashed' }, type: 'line' }, { data: [3, 4, 9, 5], name: 'Birds', type: 'line' }, { data: [3, 3, 8, 7], name: 'Mice', type: 'line' } ], title: { text: 'This is a Line chart' } }, width: 800 }; // Remove dynamic _echarts_instance_ ID const removeInstanceID = (fragment) => { fragment.getElementById('line-chart').removeAttribute('_echarts_instance_'); return fragment; }; test('renders component', () => { const { asFragment } = render(); expect(removeInstanceID(asFragment())).toMatchSnapshot(); }); test('renders title', async () => { render(); const title = await screen.findByText(props.option.title.text); expect(title).toMatchSnapshot(); }); test('renders height and width', async () => { const { asFragment } = render(); const svg = asFragment().querySelector('svg'); expect(svg).toHaveAttribute('height', `${props.height}`); expect(svg).toHaveAttribute('width', `${props.width}`); });