import { act, render, screen } from "@testing-library/react" import { describe, expect, it, vi } from "vitest" import { StyleTemplateErrorBoundary } from "../../components/style-template-error-boundary" // Компонент, который выбрасывает ошибку const ThrowError = ({ shouldThrow }: { shouldThrow: boolean }) => { if (shouldThrow) { throw new Error("Test error") } return
No error
} describe("StyleTemplateErrorBoundary", () => { beforeEach(() => { // Подавляем ошибки в консоли для тестов vi.spyOn(console, "error").mockImplementation(() => {}) }) afterEach(() => { vi.restoreAllMocks() }) it("должен отображать дочерние компоненты если нет ошибки", () => { render( , ) expect(screen.getByText("No error")).toBeInTheDocument() }) it("должен отображать сообщение об ошибке при возникновении ошибки", () => { render( , ) expect(screen.getByText("Ошибка загрузки шаблонов")).toBeInTheDocument() }) it("должен отображать кнопку повтора", () => { render( , ) expect(screen.getByRole("button", { name: /попробовать снова/i })).toBeInTheDocument() }) it("должен сбрасывать ошибку при нажатии на кнопку повтора", () => { const { rerender } = render( , ) // Проверяем, что отображается ошибка expect(screen.getByText("Ошибка загрузки шаблонов")).toBeInTheDocument() // Сначала перерендериваем с исправленным компонентом act(() => { rerender( , ) }) // Нажимаем кнопку повтора для сброса состояния ошибки const retryButton = screen.getByRole("button", { name: /попробовать снова/i, }) act(() => { retryButton.click() }) // Проверяем, что ошибка исчезла expect(screen.getByText("No error")).toBeInTheDocument() }) it("должен иметь правильную структуру при ошибке", () => { const renderResult = render( , ) expect(renderResult.container.firstChild).toHaveClass( "flex", "h-64", "w-full", "flex-col", "items-center", "justify-center", ) }) it("должен центрировать содержимое ошибки", () => { render( , ) const errorContainer = screen.getByText("Ошибка загрузки шаблонов").parentElement expect(errorContainer).toHaveClass("flex", "h-64", "w-full", "flex-col", "items-center", "justify-center") }) it("должен отображать иконку ошибки", () => { render( , ) expect(screen.getByTestId("alerttriangle-icon")).toBeInTheDocument() }) })