waffensachkunde

Waffensachkunde – Lernsoftware für die Sachkundeprüfung nach § 7 WaffG. Barrierefrei, offline, EUPL-1.2.

/ app tsconfig.tests.json

2,6 KB Rohdatei
app/tsconfig.tests.json — 57 Zeilen
1 {
2 "extends": "./tsconfig.base.json",
3
4 /* ── Warum die Tests ein eigenes Projekt sind ─────────────────────────
5 Vitest-Dateien prüfen beide Welten: `tests/renderer-*.test.tsx` mountet
6 React im jsdom, `tests/lernstand.test.ts` öffnet eine SQLite-Datei im
7 Main-Prozess, und `tests/bogen-echt.test.ts` führt beides zusammen
8 (echter Prüfungsbogen aus dem Main-Prozess, gerendert im Renderer).
9 Das ist für Integrationstests richtig so.
10
11 Lagen diese Dateien im Web-Projekt, zog jeder Import aus `src/main`
12 eine Datei in das Programm, die dort nicht im `include` steht — TypeScript
13 meldete das als TS6307 („File … is not listed within the file list of
14 project"). Zehn solcher Meldungen machten `tsc -p tsconfig.web.json`
15 unbrauchbar; echte Fehler wären darin untergegangen.
16
17 Dieses Projekt darf beide Welten sehen. Die Trennung bleibt trotzdem
18 scharf, weil sie woanders durchgesetzt wird:
19 - tsconfig.node.json prüft `src/main` weiterhin OHNE die DOM-Bibliothek,
20 Zugriffe auf `document`/`window` bleiben dort also Compilerfehler;
21 - tsconfig.web.json prüft `src/renderer` weiterhin OHNE die Node-Typen,
22 Zugriffe auf `process`/`Buffer` bleiben dort also Compilerfehler;
23 - eslint.config.mjs verbietet dem Renderer per no-restricted-imports
24 jeden Import aus `node:*`, `fs`, `path`, `child_process`, `electron`.
25 Nur die Testdateien selbst dürfen beides — sie laufen in Node. */
26 "include": [
27 "tests/**/*.ts",
28 "tests/**/*.tsx",
29 "src/main/**/*.ts",
30 "src/preload/**/*.ts",
31 "src/preload/**/*.d.ts",
32 "src/renderer/**/*.ts",
33 "src/renderer/**/*.tsx",
34 "src/renderer/**/*.d.ts",
35 "src/shared/**/*.ts",
36 // `tools/paketstand.mjs` wird von tests/paketstand.test.ts geprueft.
37 // Die Datei ist JavaScript, weil tools/gate-stempel.mjs sie ohne
38 // Uebersetzungsschritt laedt; ihre Typen stehen als JSDoc darin.
39 "tools/**/*.mjs"
40 ],
41 "compilerOptions": {
42 "composite": true,
43 "allowJs": true,
44 // Beide Umgebungen: jsdom braucht DOM, der Dateizugriff der
45 // Main-Prozess-Tests braucht Node.
46 "lib": ["ES2023", "DOM", "DOM.Iterable"],
47 "types": ["node", "vite/client", "@testing-library/jest-dom"],
48 "jsx": "react-jsx",
49 "outDir": "node_modules/.tmp/tsc-tests",
50 "tsBuildInfoFile": "node_modules/.tmp/tsc-tests.tsbuildinfo",
51 // Kein "baseUrl" - siehe Begruendung in tsconfig.web.json.
52 "paths": {
53 "@renderer/*": ["./src/renderer/src/*"],
54 "@shared/*": ["./src/shared/*"]
55 }
56 }
57 }