import { describe, it, expect, vi, beforeEach } from 'vitest' import { render, screen } from '@testing-library/react' import App from '../src/App' // Мок для страниц и компонентов vi.mock('../src/pages/LoginPage', () => ({ default: () =>
LoginPage
, })) vi.mock('../src/pages/SubscriptionsPage', () => ({ default: () =>
SubscriptionsPage
, })) vi.mock('../src/pages/SettingsPage', () => ({ default: () =>
SettingsPage
, })) vi.mock('../src/pages/DomainsPage', () => ({ default: () =>
DomainsPage
, })) vi.mock('../src/pages/TunnelsPage', () => ({ default: () =>
TunnelsPage
, })) vi.mock('../src/pages/NotFoundPage', () => ({ default: () =>
NotFoundPage
, })) vi.mock('../src/components/Layout', () => ({ default: () =>
Layout
, })) // Мок для AuthContext vi.mock('../src/auth/AuthContext', () => ({ AuthProvider: ({ children }: { children: React.ReactNode }) => children, useAuth: () => ({ isAuthenticated: false, login: vi.fn(), logout: vi.fn(), }), })) // Мок для ThemeContext vi.mock('../src/ThemeContext', () => ({ ThemeProvider: ({ children }: { children: React.ReactNode }) => children, useThemeContext: () => ({ mode: 'light' as const, toggleColorMode: vi.fn(), }), })) // Мок для AxiosInterceptor vi.mock('../src/auth/AxiosInterceptor', () => ({ AxiosInterceptor: () => null, })) // Мок для RequireAuth - просто рендерит children vi.mock('../src/auth/RequireAuth', () => ({ default: ({ children }: { children: React.ReactNode }) => children, })) // Мок для PublicRoute - просто рендерит children vi.mock('../src/auth/PublicRoute', () => ({ default: ({ children }: { children: React.ReactNode }) => children, })) describe('App', () => { beforeEach(() => { vi.clearAllMocks() }) it('должен рендериться без ошибок', () => { expect(() => { render() }).not.toThrow() }) it('должен содержать Layout компонент', () => { render() expect(screen.getByTestId('layout')).toBeInTheDocument() }) })