import { describe, it, expect } from 'vitest';
import { render, cleanup, waitFor } from '@testing-library/react'
import { Pen, Edit2, Grid, dynamicIconImports, LucideProps } from '../src/lucide-react';
import { Suspense, lazy } from 'react';
describe('Using lucide icon components', () => {
it('should render an component', () => {
const { container } = render( );
expect( container.innerHTML ).toMatchSnapshot();
});
it('should adjust the size, stroke color and stroke width', () => {
const testId = 'grid-icon';
const { container, getByTestId } = render(
,
);
const { attributes } = getByTestId(testId) as unknown as{ attributes: Record};
expect(attributes.stroke.value).toBe('red');
expect(attributes.width.value).toBe('48');
expect(attributes.height.value).toBe('48');
expect(attributes['stroke-width'].value).toBe('4');
expect( container.innerHTML ).toMatchSnapshot();
});
it('should render the alias icon', () => {
const { container } = render(
,
);
const PenIconRenderedHTML = container.innerHTML
cleanup()
const { container: Edit2Container } = render(
,
);
expect(PenIconRenderedHTML).toBe(Edit2Container.innerHTML)
});
it('should not scale the strokeWidth when absoluteStrokeWidth is set', () => {
const testId = 'grid-icon';
const { container, getByTestId } = render(
,
);
const { attributes } = getByTestId(testId) as unknown as{ attributes: Record};
expect(attributes.stroke.value).toBe('red');
expect(attributes.width.value).toBe('48');
expect(attributes.height.value).toBe('48');
expect(attributes['stroke-width'].value).toBe('1');
expect( container.innerHTML ).toMatchSnapshot();
});
it('should render icons dynamically by using the dynamicIconImports module', async () => {
interface IconProps extends Omit {
name: keyof typeof dynamicIconImports;
}
const Icon = ({ name, ...props }: IconProps) => {
const LucideIcon = lazy(dynamicIconImports[name]);
return (
);
}
const { container, getByLabelText } = render(
,
);
await waitFor(() => getByLabelText('smile'))
expect( container.innerHTML ).toMatchSnapshot();
});
})