Performance: React Testing Library integration
This affects the development and testing workflow speed, indirectly impacting how quickly UI bugs are caught and fixed, which can improve user experience by reducing runtime errors.
import { render, screen } from '@testing-library/react'; import MyComponent from '../MyComponent'; test('renders component with accessible role', () => { render(<MyComponent />); expect(screen.getByRole('main')).toBeInTheDocument(); });
import { render } from '@testing-library/react'; import MyComponent from '../MyComponent'; test('renders component', () => { const { container } = render(<MyComponent />); expect(container.querySelector('div')).toBeInTheDocument(); });
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Using container queries in tests | High DOM traversal | N/A (test environment) | N/A (test environment) | [X] Bad |
| Using accessible queries (getByRole, getByText) | Minimal DOM traversal | N/A (test environment) | N/A (test environment) | [OK] Good |
render function from React Testing Library?screen.getByText('Hello World') return?import { render, screen } from '@testing-library/react';
function Greeting() {
return <h1>Hello World</h1>;
}
test('renders greeting text', () => {
render(<Greeting />);
const element = screen.getByText('Hello World');
return element;
});import { render, screen, fireEvent } from '@testing-library/react';
function Button() {
const [count, setCount] = React.useState(0);
return <button onClick={() => setCount(count + 1)}>Clicked {count} times</button>;
}
test('increments count on click', () => {
render(<Button />);
const button = screen.getByRole('button');
fireEvent.click(button);
expect(button.textContent).toBe('Clicked 1 times');
});import { render, screen, waitFor } from '@testing-library/react';
import React from 'react';
function DataDisplay() {
const [data, setData] = React.useState(null);
React.useEffect(() => {
fetch('/api/data').then(res => res.json()).then(setData);
}, []);
if (!data) return <div>Loading...</div>;
return <div>Data: {data.value}</div>;
}
test('shows fetched data', async () => {
global.fetch = jest.fn(() => Promise.resolve({
json: () => Promise.resolve({ value: 'Hello' })
}));
render(<DataDisplay />);
await waitFor(() => screen.getByText('Data: Hello'));
expect(screen.getByText('Data: Hello')).toBeInTheDocument();
});Pass the test and this pattern moves unknown