Files
lucide/packages/lucide-react/tests/lucide-react.spec.tsx

112 lines
2.9 KiB
TypeScript
Raw Normal View History

import { describe, it, expect } from 'vitest';
import { render, cleanup, waitFor } from '@testing-library/react'
import { Pen, Edit2, Grid, LucideProps } from '../src/lucide-react';
import { Suspense, lazy } from 'react';
import dynamicIconImports from '../src/dynamicIconImports';
describe('Using lucide icon components', () => {
it('should render an component', () => {
const { container } = render( <Grid/> );
expect( container.innerHTML ).toMatchSnapshot();
});
it('should adjust the size, stroke color and stroke width', () => {
const testId = 'grid-icon';
const { container, getByTestId } = render(
<Grid
data-testid={testId}
size={48}
stroke="red"
strokeWidth={4}
/>,
);
const { attributes } = getByTestId(testId) as unknown as{ attributes: Record<string, { value: string }>};
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(
<Pen
size={48}
stroke="red"
strokeWidth={4}
/>,
);
const PenIconRenderedHTML = container.innerHTML
cleanup()
const { container: Edit2Container } = render(
<Edit2
size={48}
stroke="red"
strokeWidth={4}
/>,
);
expect(PenIconRenderedHTML).toBe(Edit2Container.innerHTML)
});
Introducing `absoluteStrokeWidth` option on Lucide Components (#939) * Add more music icons and another mic icon (#746) * Revert "Add more music icons and another mic icon (#746)" (#750) This reverts commit 57cba6ae0ecc5ecdf355858935e18e1eac175d69. * add scale Stroke width * Added scaleStrokeWidth prop to all packages * Add scaleStrokeWidth to types * Rename scaleStrokeWidth to absoluteStrokeWidth * Adds common API elements to the Angular package (#949) * Almost complete rewrite of the Angular package * Update tsconfig.spec.json * fixes icon build export file name * Updates Angular documentation with the new properties + provider injection * Update lucide-angular.md * refactored scaleStrokeWidth to be absoluteStrokeWidth to match other packages * removed codelyzer from devDeps + added flexible angular core dependencies * Deprecates createElement helper in favour of Renderer2 to support SSR --------- Co-authored-by: Karsa <karsa@karsa.org> * Add absoluteStrokeWidth in docs * update snapshots * Manual merge of main * Fixed incorrectly merged pnpm-lock.yaml * Fixes lucide-angular build * [lucide-angular] Global configuration for properties + bugfix for legacy icon provider (#1012) * Almost complete rewrite of the Angular package * Update tsconfig.spec.json * fixes icon build export file name * Updates Angular documentation with the new properties + provider injection * Update lucide-angular.md * refactored scaleStrokeWidth to be absoluteStrokeWidth to match other packages * removed codelyzer from devDeps + added flexible angular core dependencies * Deprecates createElement helper in favour of Renderer2 to support SSR * Added global configuration and fixed undefined bug in legacy icon provider. Also updated README.md * Replaces removed line in README.md * Fixes merge error * Updates export template to use the non-deprecated type * downgrade building to ng-cli@13 * downgrade to es2020 --------- Co-authored-by: Karsa <karsa@karsa.org> * rename scaleStrokeWidth to absoluteStrokeWidth in readme --------- Co-authored-by: it-is-not <72697755+it-is-not@users.noreply.github.com> Co-authored-by: Karsa <contact@karsa.org> Co-authored-by: Eric Fennis <eric@dreamteam.nl> Co-authored-by: Karsa <karsa@karsa.org> Co-authored-by: Eric Fennis <eric.fennis@nac41112.nedap.local>
2023-04-20 16:08:34 +02:00
it('should not scale the strokeWidth when absoluteStrokeWidth is set', () => {
const testId = 'grid-icon';
const { container, getByTestId } = render(
<Grid
data-testid={testId}
size={48}
stroke="red"
absoluteStrokeWidth
/>,
);
const { attributes } = getByTestId(testId) as unknown as{ attributes: Record<string, { value: string }>};
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<LucideProps, 'ref'> {
name: keyof typeof dynamicIconImports;
}
const Icon = ({ name, ...props }: IconProps) => {
const LucideIcon = lazy(dynamicIconImports[name]);
return (
<Suspense fallback={null}>
<LucideIcon {...props} />
</Suspense>
);
}
const { container, getByLabelText } = render(
<Icon
aria-label="smile"
name="smile"
size={48}
stroke="red"
absoluteStrokeWidth
/>,
);
await waitFor(() => getByLabelText('smile'))
expect( container.innerHTML ).toMatchSnapshot();
});
})