import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
test("добавляет товар в корзину", async () => {
render(<Product id={1} />);
await userEvent.click(screen.getByRole("button", { name: "В корзину" }));
expect(screen.getByText("В корзине: 1")).toBeInTheDocument();
});
Что важно знать
- Testing Library ищет элементы так, как их видит пользователь: по роли, подписи, тексту. Тест не ломается при рефакторинге внутренностей.
- Не проверять внутреннее состояние и количество рендеров — только видимое поведение.
- Сетевые запросы подменять на уровне сети (MSW), а не мокать
fetchв каждом тесте. - Таймеры — фейковые (
vi.useFakeTimers), асинхронность —findBy…иwaitFor. - Покрытие кода — ориентир, а не цель.