Testowanie.
Kreator DXPR ma cztery rodzaje automatycznych kontroli: test edytora w Puppeteer, testy end-to-end w Bashu dla poleceń Drush, pakiet Selenium regresji wizualnej w osobnym repozytorium dxpr_maven i lintery. Ta strona wymienia każde z nich, jak je uruchomić lokalnie i jak uruchamia je CI.
Co istnieje
| Kontrola | Gdzie się znajduje | Uruchamia się na |
|---|---|---|
| Test konsoli i układu edytora | test/test-editor.js |
Pull requesty dotykające JavaScript, HTML albo test/ (.github/workflows/fe-test.yaml) |
| Testy end-to-end Drush | scripts/drush-e2e/ |
Pull requesty dotykające PHP, YAML albo Markdown (.github/workflows/review.yaml) |
| Pakiet Selenium regresji wizualnej | dxpr_maven, repozytorium |
Polecenia w komentarzach PR (.github/workflows/e2e-command.yaml, e2e-bs3-command.yml, e2eV2-command.yaml) |
| Standardy kodowania PHP (phpcs) | scripts/linters/run-drupal-lint.sh, phpcs.xml.dist |
Pull requesty dotykające PHP, YAML albo Markdown; każde wypchnięcie do 3.x |
| PHPStan | scripts/linters/run-drupal-check.sh |
Pull requesty dotykające PHP, YAML albo Markdown; każde wypchnięcie do 3.x |
| ESLint, Stylelint, Rust Clippy | scripts/linters/ |
Pull requesty, filtrowane według zmienionych ścieżek |
| Wykrywacze przestarzałości | .github/workflows/deprecations.yml |
Pull requesty dotykające js/ albo dxpr_builder/build/ |
Kontrole dokumentacji (markdownlint, check_docs.py, Vale) |
.markdownlint-cli2.yaml, docs/lint/, .vale.ini |
Pull requesty dotykające docs/ (review.yaml) |
Jedyny test PHPUnit w repozytorium to
modules/dxpr_builder_media/tests/src/FunctionalJavascript/MediaEntityBrowserTest.php
dla starszego submodułu mediów. Żaden przebieg GitHub go nie uruchamia;
potok GitLab drupal.org (.gitlab-ci.yml) używa standardowych
szablonów DrupalCI, których zadanie PHPUnit nie jest tam wyłączone.
Test konsoli edytora
test/test-editor.js startuje serwer statyczny na porcie 3000
(test/start-standalone-server.js) i otwiera cztery samodzielne strony
z test/standalone-editor/ w headless Chrome:
test-bs5-anon.html, test-bs5-cms-block.html,
test-bs5-editor.html i test-bs5-clean-html.html. Nie udaje się, gdy:
- strona rzuca błąd JavaScript;
- pełny edytor nie jest gotowy w 2000 ms albo po wczytaniu nie zostały odroczone żadne kontrolki poza ekranem (bramka wydajności);
- kontrolki elementów nakładają się w trybie zaawansowanego użytkownika (poziom bazowy to zero nakładających się par);
- zapisany HTML strony pełnego edytora jest większy niż wzorzec 32 094 znaków;
- kontrola specyficzna dla strony się nie udaje, na przykład parsowanie czystego HTML Bootstrapa, okruszek, typy paneli, lokalne ustawienie wideo Muted albo podgląd bloku CMS.
Strony wczytują zbudowane pliki z dxpr_builder/, więc najpierw zbuduj.
-
Zainstaluj zależności:
npm install -
Zbuduj pakiet edytora. Skrypt CI uruchamia te zadania w tej kolejności (
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 -
Uruchom test:
npm run fe-testUżyj
npm run fe-test:headed, aby obserwować przeglądarkę, inpm run fe-test:dev, aby serwować samodzielne strony bez uruchamiania asercji.
W CI .github/workflows/fe-test.yaml uruchamia ten test przez
Dockera:
docker compose --profile fe-test run --rm fe-test
Testy end-to-end Drush
scripts/drush-e2e/run-e2e-tests.sh instaluje świeżą witrynę Drupal 11 z
SQLite wewnątrz kontenera Composer, dowiązuje do niej moduł,
włącza go, tworzy typ treści Basic page z formaterem
dxpr_builder_text, szablon strony i szablon użytkownika,
potem uruchamia każdy plik scripts/drush-e2e/test-*.sh:
| Plik | Testowane polecenia |
|---|---|
test-cleartext-key-update.sh |
Aktualizacja 9026 czyści jawny klucz produktu pozostawiony w magazynie modułu Key i zachowuje go, gdy wybranego klucza nie ma (cleartext-key-update.php) |
test-cms-cache-tags.sh |
Unieważnianie pamięci podręcznej list bloków i widoków (cms-cache-tags.php) |
test-elements.sh |
drush dxb:element:list |
test-migration-summary.sh |
Sformułowania liczby pojedynczej i mnogiej podsumowania kolumny migracji (migration-summary.php) |
test-migrations.sh |
drush dxb:migrate i regresje migracji treści (migration-regressions.php) |
test-page-controller.sh |
Kontroller strony buduje dla swoich tras (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 |
Moduł Drag and Drop Page dostarcza każdą wymienioną konfigurację (page-module.php) |
test-profile-buttons.sh |
Przyciski edytora tekstu profili kreatora (profile-buttons.php) |
test-profile-order.sh |
Który profil stosuje się według wagi i kolejność listy profili (profile-order.php) |
test-settings-form.sh |
Zapisywanie i walidacja klucza produktu w General Settings i wyzwalana synchronizacja licencji (settings-form.php) |
test-setup-ai.sh |
drush dxb:setup-ai |
test-templates.sh |
drush dxb:template:list |
test-user-licenses-page.sh |
Karta licencji pokazuje się raz w User Licenses i nadal pokazuje się w People (user-licenses-page.php) |
test-user-settings.sh |
Własne ustawienia edytora każdego redaktora (user-settings.php) |
test-user-templates.sh |
drush dxb:user-template:list, drush dxb:user-template:create |
Uruchom wszystkie:
docker compose --profile drush-e2e run --rm e2e-test
Uruchom jeden plik, podając część jego nazwy; skrypt dopasowuje
scripts/drush-e2e/test-*<filter>*.sh:
docker compose --profile drush-e2e run --rm e2e-test page-create
Aby dodać test, utwórz scripts/drush-e2e/test-<name>.sh, wywołaj
section "<Title>" i użyj helperów z
scripts/drush-e2e/_helpers.sh: assert_success, assert_fail,
assert_eq, assert_has, assert_not_empty, assert_runs i
assert_dry_run. Każdy helper przyjmuje opis i ciąg
polecenia.
W CI ten pakiet to zadanie „Run Drush E2E tests” w
.github/workflows/review.yaml. Uruchamia się, gdy pull request zmienia pliki
.php, .module, .inc, .install, .yml, .md, composer.json
albo composer.lock.
Pakiet Selenium regresji wizualnej
Testy przeglądarkowe to pakiety Java TestNG w repozytorium dxpr_maven.
Działają na stosie Docker zdefiniowanym w
docker-compose.test.yml (hub Selenium, węzły Chrome i kontener Maven)
na witrynie zainstalowanej z tego repozytorium. Nie uruchamiasz ich
z lokalnej kopii; wyzwalasz je z komentarza pull requesta.
.github/workflows/command-dispatcher.yml zamienia komentarz
w uruchomienie przebiegu.
| Polecenie | Pakiet | Przebieg |
|---|---|---|
/e2e |
chrome.editor.bs5.parallel.xml plus anonimowy pakiet BS5 |
e2e-command.yaml |
/e2e-bs3 |
chrome.editor.bs3.parallel.xml |
e2e-bs3-command.yml |
/e2eV2 |
Pakiety edytora i anonimowe BS5 na stosie DXPR CMS | e2eV2-command.yaml |
/qa-demo-2x-dxpr_theme6x-tests |
Demo QA z motywem DXPR Theme 6.x | qa-demo-2x-dxpr_theme6x-tests-command.yaml |
Opcje, jak udokumentowano w CONTRIBUTING.md:
groups=row-element-test,icon-element-testuruchamia nazwane grupy<test name="...">z XML pakietu.tests=RowColumnLayoutVisualTesturuchamia nazwane klasy testów.maven_ref=branch-nameużywa gałęzidxpr_maven, dzięki czemu zmiana kreatora i jej aktualizacja testu recenzowane są razem.
Przebieg przesyła target/reports/** i zrzuty ekranu jako artefakt
kompilacji i publikuje wynik jako komentarz w pull
requeście, wymieniając nieudane albo testy, które przeszły dopiero po ponowieniu. Każde
zadanie pakietu ma 90-minutowy limit czasu.
Lintery i analiza statyczna
Każdy linter jest usługą Docker Compose, więc poza Dockerem nie jest potrzebny żaden lokalny łańcuch narzędzi.
| Usługa | Polecenie | Co sprawdza |
|---|---|---|
drupal-lint |
docker compose run --rm drupal-lint |
phpcs ze standardami PHPCompatibility (PHP 8.3 i nowsze), Drupal i DrupalPractice dla PHP |
drupal-check-D11 |
docker compose run --rm drupal-check-D11 |
PHPStan poziom 5 z mglaman/phpstan-drupal w świeżym drupal/recommended-project |
eslint |
docker compose run --rm eslint |
ESLint na js/ i dxpr_builder/build/ plus sprawdzanie pisowni dxpr_builder/extracted_t_functions.js |
stylelint |
docker compose run --rm stylelint |
Stylelint na dxpr_builder/sass/ i sass/ |
rust-lint |
docker compose run --rm rust-lint |
Clippy na źródłach Rust w rust/ |
no-jquery, no-underscore, html-in-js |
docker compose run --rm <service> |
Wykrywacze przestarzałości z .github/workflows/deprecations.yml |
Warianty z automatyczną naprawą istnieją dla phpcs, ESLint i Stylelint
(drupal-lint-auto-fix, eslint-auto-fix, stylelint-auto-fix).
Te same kontrole są dostępne bez Dockera przez npm run lint:scss, npm run lint:no-jquery, npm run lint:no-underscore
i npm run lint:html-in-js.
npm install instaluje też hook pre-commit Husky
(.husky/pre-commit). Uruchamia pasujące usługi auto-fix i lint
na staged plikach JavaScript, PHP i SCSS oraz źródłach Rust,
a docs/video-tools/bin/lint-videos.mjs, gdy pliki w
docs/ są staged.
.github/workflows/review.yaml uruchamia lintery pasujące do
zmienionych ścieżek przy każdym pull requeście. .github/workflows/main.yaml
uruchamia drupal-lint, eslint, drupal-check-D11 i rust-lint przy
każdym wypchnięciu do 3.x. Oba nie udają kompilacji, gdy kontrola się nie powiedzie, i
zapisują podsumowanie z naruszającymi plikami.
Co dalej?
- Współtworzenie dla procesu pull requestów i
przebiegu
maven_refdla aktualizacji testów. - Polecenia Drush dla poleceń ćwiczonych przez pakiet Bash.