Performance: Component testing with Testing Library
Component testing affects development speed and feedback loop but can indirectly impact page load speed by encouraging better code practices.
import { render, fireEvent, screen } from '@testing-library/svelte'; import MyComponent from './MyComponent.svelte'; test('button click updates text', async () => { render(MyComponent); const button = screen.getByRole('button', { name: /click me/i }); await fireEvent.click(button); expect(screen.getByText(/clicked/i)).toBeInTheDocument(); });
import { render } from '@testing-library/svelte'; import MyComponent from './MyComponent.svelte'; // Testing by querying DOM nodes directly and manipulating them const { container } = render(MyComponent); const button = container.querySelector('button'); button.click(); // No assertions or indirect testing
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Direct DOM queries and manipulation in tests | High (many queries) | N/A | N/A | [X] Bad |
| Using Testing Library queries and fireEvent | Minimal and targeted | N/A | N/A | [OK] Good |
import { render } from '@testing-library/svelte';
import Button from './Button.svelte';
test('button shows correct label', () => {
const { getByText } = render(Button, { props: { label: 'Click me' } });
const button = getByText('Click me');
expect(button).toBeInTheDocument();
});import { render } from '@testing-library/svelte';
import Counter from './Counter.svelte';
test('increments count on button click', () => {
const { getByText } = render(Counter);
const button = getByText('Increment');
button.click();
expect(getByText('Count: 1')).toBeInTheDocument();
});import { render, fireEvent, waitFor } from '@testing-library/svelte';
import MessageToggle from './MessageToggle.svelte';
test('shows message after click', async () => {
const { getByText, queryByText } = render(MessageToggle);
expect(queryByText('Hello!')).toBeNull();
const button = getByText('Show Message');
await fireEvent.click(button);
await waitFor(() => getByText('Hello!'));
expect(getByText('Hello!')).toBeInTheDocument();
});Pass the test and this pattern moves unknown