docs
TYPO3 v14
Erweitern  /  Entwicklung und Tests

18 — Entwicklung und Tests

Für alle, die an yavi_core oder einem Theme arbeiten.


Aufbau des Repositorys

text
<distribution>/
├── config/sites/<id>/settings.yaml   ← was das Backend-Modul schreibt
├── packages/
│   ├── yavi-core/                    Framework
│   └── yavi-lucerne/                 Theme
├── vendor/
└── init-yavi.sh                      lokales DDEV-Setup

Die Pakete sind über ein path-Repository von Composer eingebunden; eine Änderung in packages/ wirkt also ohne Neuinstallation.

Die tägliche Schleife

bash
# ein Template, eine SCSS-Datei oder eine PHP-Klasse bearbeiten
ddev exec vendor/bin/typo3 cache:flush
# neu laden

Fast jedes „meine Änderung tut nichts“ ist ein fehlender Cache-Flush: SCSS wird in eine gehashte Datei kompiliert, Fluid-Templates werden kompiliert, DI wird kompiliert, und die Importmap wird nur im Development-Kontext je Dateiänderung cache-invalidiert.

Tests

bash
ddev composer test                                  # alles
ddev exec php packages/yavi-core/Tests/run.php Unit # eine Suite

Der Runner kommt ohne Abhängigkeiten aus — kein PHPUnit — und endet bei einem Fehlschlag mit einem Exit-Code ungleich null; er taugt also als Pre-Commit- oder CI-Schranke. Tests/bootstrap.php versucht einen vollständigen TYPO3-Bootstrap und fällt auf reines Autoloading zurück, wenn keine Datenbank vorhanden ist; Tests, die den Container brauchen, melden sich selbst als übersprungen, statt zu scheitern.

Was die Suiten heute abdecken:

BereichSchützt vor
LizenzVertrauen in den Cache, Alter der Signatur, Produktgeltung
EinstellungenDass jedes Layout-Feld rendert, auf eine CSS-Variable abbildet, den Schreibweg übersteht und sich löscht, sobald es auf die Vorgabe gesetzt wird
Tokens-base-Eingaben der Abstände, Radien als Faktor gegen Länge, die SCSS-Listen, die über alle Themes hinweg synchron bleiben
TemplatesKein positives tabindex, jedes <iframe> hat einen Titel, jedes aria-labelledby zeigt auf eine vorhandene id
ViewHelpersFormatText, InlineIcon, Startwerte der Verläufe, Auswertung des Eckenradius

Auf die Signatur der Assertion achten — der Name kommt zuerst:

php
$this->assertSame('round trip: ' . $key, $expected, $actual);

Einen Test hinzufügen

Er gehört nach Tests/Unit/ oder Tests/Integration/, die Klasse heißt …Test, und jeder Test wird nach dem Fehler benannt, vor dem er schützt. Ein Fehlschlag soll der nächsten Person sagen, was kaputt ist, nicht bloß, dass etwas kaputt ist.

Build-Skripte

bash
ddev exec php packages/yavi-core/Build/sync-theme-scss.php          # die SCSS-Listen jedes Themes neu erzeugen
ddev exec php packages/yavi-core/Build/sync-theme-scss.php --check  # scheitert bei Abweichung, von den Tests genutzt

Wo was liegt

Zu ändernNachsehen in
Das Markup eines Inhaltselementsyavi-core/Resources/Private/Templates/ContentElements/
Ein gemeinsamer Bausteinyavi-core/Resources/Private/Partials/ContentElements/
Die Geometrie einer Komponenteyavi-core/Resources/Public/Scss/Structure/
Farbe und Dekorationyavi-core/Resources/Public/Scss/Skin/ oder das Skin/ des Themes
Ein Backend-Feldyavi-core/Configuration/TCA/Overrides/
Eine Site-Einstellungyavi-core/Configuration/Sets/Full/settings.definitions.yaml
Das Backend-Modulyavi-core/Classes/Controller/Backend/ThemeSettingsController.php + Resources/Private/Templates/Backend/ThemeSettings.html
Dessen Gestaltungyavi-core/Resources/Public/Vendor/Backend/Css/backend-module.css
Beschriftungenyavi-core/Resources/Private/Language/

Eine Site-Einstellung hinzufügen

  1. In settings.definitions.yaml deklarieren, mit Kategorie, Beschriftung und Beschreibung. Die Beschreibung ist nicht optional — ein Test erzwingt, dass jedes Feld sich selbst erklärt und mehr sagt als seine Beschriftung.
  2. In ThemeCssVariablesRenderer::CSS_VARIABLE_MAP auf eine CSS Custom Property abbilden — ein weiterer Test scheitert, wenn ein Feld keine Variable erreicht.
  3. Das Token im SCSS mit einem Rückfall lesen: var(--my-token, <die Vorgabe des Themes>).
  4. Cache leeren, Tests laufen lassen.

Sprachdateien

DateiEnthält
Backend.xlf / de.Backend.xlfTCA-Beschriftungen, Backend-Modul
locallang.xlf / de.locallang.xlfFrontend-Beschriftungen
locallang_mod.xlf, locallang_be.xlf (+ de.-Varianten)Beschriftungen von Modul und Backend-Layouts
locallang_db.xlf / de.locallang_db.xlfBeschriftungen der Formular-Finisher

Zwei Regeln, die man leicht falsch macht:

Konventionen in dieser Codebasis