Testen.
DXPR Builder hat vier Arten automatisierter Prüfungen: einen
Puppeteer-Test des Editors, Bash-End-to-End-Tests für die Drush-Befehle,
eine Selenium-Suite für visuelle Regression im separaten
dxpr_maven-Repository und Linter. Diese Seite listet jede, wie Sie
sie lokal ausführen und wie CI sie ausführt.
Was existiert
| Prüfung | Wo sie liegt | Läuft auf |
|---|---|---|
| Editor-Konsolen- und Layouttest | test/test-editor.js |
Pull-Requests, die JavaScript, HTML oder test/ berühren (.github/workflows/fe-test.yaml) |
| Drush-End-to-End-Tests | scripts/drush-e2e/ |
Pull-Requests, die PHP, YAML oder Markdown berühren (.github/workflows/review.yaml) |
| Selenium-Suite für visuelle Regression | dxpr_maven-Repository |
PR-Kommentar-Befehle (.github/workflows/e2e-command.yaml, e2e-bs3-command.yml, e2eV2-command.yaml) |
| PHP-Coding-Standards (phpcs) | scripts/linters/run-drupal-lint.sh, phpcs.xml.dist |
Pull-Requests, die PHP, YAML oder Markdown berühren; jeder Push auf 3.x |
| PHPStan | scripts/linters/run-drupal-check.sh |
Pull-Requests, die PHP, YAML oder Markdown berühren; jeder Push auf 3.x |
| ESLint, Stylelint, Rust Clippy | scripts/linters/ |
Pull-Requests, gefiltert nach geänderten Pfaden |
| Deprecation-Detektoren | .github/workflows/deprecations.yml |
Pull-Requests mit Änderungen an js/ oder dxpr_builder/build/ |
Doku-Prüfungen (markdownlint, check_docs.py, Vale) |
.markdownlint-cli2.yaml, docs/lint/, .vale.ini |
Pull-Requests, die docs/ berühren (review.yaml) |
Der einzige PHPUnit-Test im Repository ist
modules/dxpr_builder_media/tests/src/FunctionalJavascript/MediaEntityBrowserTest.php
für das alte Medien-Submodul. Kein GitHub-Workflow führt ihn aus; die
drupal.org-GitLab-Pipeline (.gitlab-ci.yml) nutzt die Standard-
DrupalCI-Vorlagen, deren PHPUnit-Job dort nicht abgeschaltet ist.
Editor-Konsolentest
test/test-editor.js startet einen statischen Server auf Port 3000
(test/start-standalone-server.js) und öffnet vier Standalone-Seiten
aus test/standalone-editor/ in headless Chrome:
test-bs5-anon.html, test-bs5-cms-block.html,
test-bs5-editor.html und test-bs5-clean-html.html. Er scheitert,
wenn:
- eine Seite einen JavaScript-Fehler wirft;
- der volle Editor nicht in 2000 ms bereit ist, oder nach dem Laden noch Steuerelemente außerhalb des Bildschirms verzögert bleiben (das Performance-Gate);
- Elementsteuerelemente im Power-User-Modus überlappen (die Baseline ist null überlappende Paare);
- das gespeicherte HTML der vollen Editorseite größer ist als die Referenz von 32.094 Zeichen;
- eine seitenspezifische Prüfung scheitert, zum Beispiel das Parsen von sauberem Bootstrap-HTML, die Breadcrumb, die Paneltypen, die Muted-Einstellung für lokale Videos oder die CMS-Block-Vorschau.
Die Seiten laden die gebauten Dateien aus dxpr_builder/, bauen Sie daher
zuerst.
-
Abhängigkeiten installieren:
npm install -
Editor-Bundle bauen. Das CI-Skript führt diese Tasks in dieser Reihenfolge aus (
test/scripts/run-fe-tests.sh):npx grunt concat npx grunt exec:gen npx grunt babel npx grunt terser npx grunt sass npx grunt postcss -
Test ausführen:
npm run fe-testNutzen Sie
npm run fe-test:headed, um den Browser zu beobachten, undnpm run fe-test:dev, um die Standalone-Seiten ohne Assertions zu servieren.
In CI führt .github/workflows/fe-test.yaml denselben Test über
Docker aus:
docker compose --profile fe-test run --rm fe-test
Drush-End-to-End-Tests
scripts/drush-e2e/run-e2e-tests.sh installiert eine frische Drupal-11-Website mit
SQLite in einem Composer-Container, verlinkt das Modul hinein,
aktiviert es, erzeugt einen Basic-Page-Inhaltstyp mit dem Formatierer
dxpr_builder_text, eine Seitenvorlage und eine Benutzervorlage,
dann führt es jede Datei scripts/drush-e2e/test-*.sh aus:
| Datei | Geprüfte Befehle |
|---|---|
test-cleartext-key-update.sh |
Update 9026 löscht einen Klartext-Produktschlüssel unter Key-Modul-Speicherung und behält ihn, wenn der gewählte Key weg ist (cleartext-key-update.php) |
test-cms-cache-tags.sh |
Cache-Invalidierung von Block- und Ansichtslisten (cms-cache-tags.php) |
test-elements.sh |
drush dxb:element:list |
test-migration-summary.sh |
Singular- und Pluralformulierung der Migrationsspalten-Übersicht (migration-summary.php) |
test-migrations.sh |
drush dxb:migrate und Inhaltsmigrations-Regressionen (migration-regressions.php) |
test-page-controller.sh |
Die Seiten-Controller-Builds für ihre Routen (page-controller.php) |
test-page-create.sh |
drush dxb:page:create |
test-page-get-update.sh |
drush dxb:page:get, drush dxb:page:update |
test-page-module.sh |
Das Drag-and-drop-Page-Modul bringt jede Konfiguration mit, die es listet (page-module.php) |
test-profile-buttons.sh |
Texteditor-Schaltflächen von Builder-Profilen (profile-buttons.php) |
test-profile-order.sh |
Welches Profil per Weight greift, und die Reihenfolge der Profilliste (profile-order.php) |
test-settings-form.sh |
Speichern und Validieren des Produktschlüssels auf General Settings und der ausgelöste Lizenz-Sync (settings-form.php) |
test-setup-ai.sh |
drush dxb:setup-ai |
test-templates.sh |
drush dxb:template:list |
test-user-licenses-page.sh |
Die Lizenzkarte erscheint einmal auf User Licenses und weiterhin auf People (user-licenses-page.php) |
test-user-settings.sh |
Die eigenen Editor-Einstellungen jeder bearbeitenden Person (user-settings.php) |
test-user-templates.sh |
drush dxb:user-template:list, drush dxb:user-template:create |
Alle ausführen:
docker compose --profile drush-e2e run --rm e2e-test
Eine Datei ausführen, indem Sie einen Teil ihres Namens übergeben; das Skript matcht
scripts/drush-e2e/test-*<filter>*.sh:
docker compose --profile drush-e2e run --rm e2e-test page-create
Um einen Test hinzuzufügen, erstellen Sie scripts/drush-e2e/test-<name>.sh, rufen
section "<Title>" auf und nutzen die Helfer aus
scripts/drush-e2e/_helpers.sh: assert_success, assert_fail,
assert_eq, assert_has, assert_not_empty, assert_runs und
assert_dry_run. Jeder Helfer nimmt eine Beschreibung und eine Befehlszeichenkette.
In CI ist diese Suite der Job „Run Drush E2E tests“ in
.github/workflows/review.yaml. Er läuft, wenn ein Pull-Request
.php-, .module-, .inc-, .install-, .yml-, .md-,
composer.json- oder composer.lock-Dateien ändert.
Selenium-Suite für visuelle Regression
Die Browser-Tests sind Java-TestNG-Suiten im dxpr_maven-Repository.
Sie laufen gegen einen Docker-Stack, definiert in
docker-compose.test.yml (Selenium-Hub, Chrome-Nodes und ein Maven-Container), auf
einer aus diesem Repository installierten Website. Sie führen sie nicht aus einem
lokalen Checkout aus; Sie lösen sie aus einem Pull-Request-Kommentar aus.
.github/workflows/command-dispatcher.yml macht aus dem Kommentar einen
Workflow-Lauf.
| Befehl | Suite | Workflow |
|---|---|---|
/e2e |
chrome.editor.bs5.parallel.xml plus die anonyme BS5-Suite |
e2e-command.yaml |
/e2e-bs3 |
chrome.editor.bs3.parallel.xml |
e2e-bs3-command.yml |
/e2eV2 |
BS5-Editor- und Anonymous-Suiten auf dem DXPR-CMS-Stack | e2eV2-command.yaml |
/qa-demo-2x-dxpr_theme6x-tests |
QA-Demo mit DXPR Theme 6.x | qa-demo-2x-dxpr_theme6x-tests-command.yaml |
Optionen, wie in CONTRIBUTING.md dokumentiert:
groups=row-element-test,icon-element-testführt die benannten<test name="...">-Gruppen aus der Suite-XML aus.tests=RowColumnLayoutVisualTestführt die benannten Testklassen aus.maven_ref=branch-namenutzt einendxpr_maven-Branch; so werden eine Builder-Änderung und ihre Testaktualisierung gemeinsam reviewt.
Der Workflow lädt target/reports/** und die Screenshots als Build-Artefakt
hoch und postet das Ergebnis als Kommentar auf den Pull-Request, mit scheiternden
oder nur im Wiederholungslauf bestandenen Tests. Jeder Suite-Job hat einen Timeout von 90 Minuten.
Linter und statische Analyse
Jeder Linter ist ein Docker-Compose-Dienst, daher braucht es außer Docker keine lokale Toolchain.
| Dienst | Befehl | Was er prüft |
|---|---|---|
drupal-lint |
docker compose run --rm drupal-lint |
phpcs mit PHPCompatibility (PHP 8.3 und höher), Drupal- und DrupalPractice-Standards |
drupal-check-D11 |
docker compose run --rm drupal-check-D11 |
PHPStan Stufe 5 mit mglaman/phpstan-drupal in frischem drupal/recommended-project |
eslint |
docker compose run --rm eslint |
ESLint auf js/ und dxpr_builder/build/, plus Rechtschreibprüfung von dxpr_builder/extracted_t_functions.js |
stylelint |
docker compose run --rm stylelint |
Stylelint auf dxpr_builder/sass/ und sass/ |
rust-lint |
docker compose run --rm rust-lint |
Clippy auf den Rust-Quellen in rust/ |
no-jquery, no-underscore, html-in-js |
docker compose run --rm <service> |
Deprecation-Detektoren aus .github/workflows/deprecations.yml |
Auto-Fix-Varianten existieren für phpcs, ESLint und Stylelint
(drupal-lint-auto-fix, eslint-auto-fix, stylelint-auto-fix).
Dieselben Prüfungen gibt es ohne Docker über npm run lint:scss,
npm run lint:no-jquery, npm run lint:no-underscore und
npm run lint:html-in-js.
npm install installiert außerdem einen Husky-Pre-Commit-Hook
(.husky/pre-commit). Er führt die passenden Auto-Fix- und Lint-Dienste
auf den gestagten JavaScript-, PHP- und SCSS-Dateien und den Rust-Quellen aus,
und docs/video-tools/bin/lint-videos.mjs, wenn Dateien unter docs/
gestagt sind.
.github/workflows/review.yaml führt die Linter, die zu den geänderten Pfaden
passen, auf jedem Pull-Request aus. .github/workflows/main.yaml führt
drupal-lint, eslint, drupal-check-D11 und rust-lint auf
jedem Push auf 3.x aus. Beide lassen den Build scheitern, wenn eine Prüfung
scheitert, und schreiben eine Übersicht mit den beanstandeten Dateien.
Wie geht es weiter?
- Mitwirken für den Pull-Request-Prozess und
den
maven_ref-Workflow für Testaktualisierungen. - Drush-Befehle für die Befehle, die die Bash-Suite prüft.