Testowanie.

Poznaj DXPR BuilderRozszerzeniaNarzędzia

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.

  1. Zainstaluj zależności:

    npm install
    
  2. 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
    
  3. Uruchom test:

    npm run fe-test
    

    Użyj npm run fe-test:headed, aby obserwować przeglądarkę, i npm 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-test uruchamia nazwane grupy <test name="..."> z XML pakietu.
  • tests=RowColumnLayoutVisualTest uruchamia nazwane klasy testów.
  • maven_ref=branch-name używa gałęzi dxpr_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?