From 79c355193440d79cf58d71af45437139725b032f Mon Sep 17 00:00:00 2001 From: root Date: Thu, 1 Oct 2026 10:35:48 +0000 Subject: [PATCH] Routen in eigene Datei ausgelagert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AppRoutes in src/routes.tsx, damit die Tests die echte Routenliste im MemoryRouter rendern können. Keine Verhaltensänderung. setup.ts bekommt Attrappen für IntersectionObserver und ResizeObserver (jsdom kennt sie nicht). Co-Authored-By: Claude Sonnet 5.5 --- src/App.tsx | 25 +++---------------------- src/routes.tsx | 26 ++++++++++++++++++++++++++ src/test/setup.ts | 15 +++++++++++++++ 3 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 src/routes.tsx diff --git a/src/App.tsx b/src/App.tsx index 7923c4c..00aa157 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -3,18 +3,10 @@ import { Toaster as Sonner } from "@/components/ui/sonner"; import { TooltipProvider } from "@/components/ui/tooltip"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { useEffect } from "react"; -import { BrowserRouter, Routes, Route, useLocation } from "react-router-dom"; +import { BrowserRouter, useLocation } from "react-router-dom"; import { ThemeProvider } from "@/components/ThemeProvider"; import { AnalyticsProvider } from "@/components/AnalyticsProvider"; -import Index from "./pages/Index"; -import ContactPage from "./pages/Contact"; -import AGBPage from "./pages/AGB"; -import ImpressumPage from "./pages/Impressum"; -import AboutPage from "./pages/About"; -import WartungsAboPage from "./pages/WartungsAbo"; -import HostingAboPage from "./pages/HostingAbo"; -import DatenschutzPage from "./pages/Datenschutz"; -import NotFound from "./pages/NotFound"; +import { AppRoutes } from "./routes"; const queryClient = new QueryClient(); @@ -36,18 +28,7 @@ const App = () => ( - - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */} - } /> - + diff --git a/src/routes.tsx b/src/routes.tsx new file mode 100644 index 0000000..38ec62e --- /dev/null +++ b/src/routes.tsx @@ -0,0 +1,26 @@ +import { Routes, Route } from "react-router-dom"; +import Index from "./pages/Index"; +import ContactPage from "./pages/Contact"; +import AGBPage from "./pages/AGB"; +import ImpressumPage from "./pages/Impressum"; +import AboutPage from "./pages/About"; +import WartungsAboPage from "./pages/WartungsAbo"; +import HostingAboPage from "./pages/HostingAbo"; +import DatenschutzPage from "./pages/Datenschutz"; +import NotFound from "./pages/NotFound"; + +/** Alle Seiten der Website; App.tsx rendert sie im BrowserRouter, die Tests im MemoryRouter. */ +export const AppRoutes = () => ( + + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */} + } /> + +); diff --git a/src/test/setup.ts b/src/test/setup.ts index fa2d096..85fca3d 100644 --- a/src/test/setup.ts +++ b/src/test/setup.ts @@ -13,3 +13,18 @@ Object.defineProperty(window, "matchMedia", { dispatchEvent: () => {}, }), }); + +// jsdom kennt diese Browser-APIs nicht; Komponenten wie BorderGlow brauchen sie. +class BeobachterAttrappe { + observe() {} + unobserve() {} + disconnect() {} + takeRecords() { + return []; + } +} +for (const name of ["IntersectionObserver", "ResizeObserver"]) { + if (!(name in window)) { + Object.defineProperty(window, name, { writable: true, configurable: true, value: BeobachterAttrappe }); + } +}