Тестування.

Вивчення DXPR BuilderРозширенняІнструменти

DXPR Builder має чотири види автоматизованих перевірок: тест редактора Puppeteer, наскрізні тести Bash для команд Drush, набір візуальної регресії Selenium в окремому репозиторії dxpr_maven, і лінтери. Ця сторінка перелічує кожну, як запускати її локально і як її запускає CI.

Що існує

Перевірка Де живе Запускається на
Тест консолі та макета редактора test/test-editor.js Пул-реквести, які чіпають JavaScript, HTML або test/ (.github/workflows/fe-test.yaml)
Наскрізні тести Drush scripts/drush-e2e/ Пул-реквести, які чіпають PHP, YAML або Markdown (.github/workflows/review.yaml)
Набір візуальної регресії Selenium dxpr_maven-репозиторій Команди коментарів PR (.github/workflows/e2e-command.yaml, e2e-bs3-command.yml, e2eV2-command.yaml)
Стандарти кодування PHP (phpcs) scripts/linters/run-drupal-lint.sh, phpcs.xml.dist Пул-реквести, які чіпають PHP, YAML або Markdown; кожен пуш до 3.x
PHPStan scripts/linters/run-drupal-check.sh Пул-реквести, які чіпають PHP, YAML або Markdown; кожен пуш до 3.x
ESLint, Stylelint, Rust Clippy scripts/linters/ Пул-реквести, відфільтровані за зміненими шляхами
Детектори застарілості .github/workflows/deprecations.yml Пул-реквести, які чіпають js/ або dxpr_builder/build/
Перевірки документації (markdownlint, check_docs.py, Vale) .markdownlint-cli2.yaml, docs/lint/, .vale.ini Пул-реквести, які чіпають docs/ (review.yaml)

Єдиний PHPUnit-тест у репозиторії це modules/dxpr_builder_media/tests/src/FunctionalJavascript/MediaEntityBrowserTest.php для застарілого медіасубмодуля. Жоден робочий процес GitHub його не запускає; конвеєр GitLab drupal.org (.gitlab-ci.yml) використовує стандартні шаблони DrupalCI, чиє завдання PHPUnit там не вимкнено.

Тест консолі редактора

test/test-editor.js запускає статичний сервер на порту 3000 (test/start-standalone-server.js) і відкриває чотири автономні сторінки з test/standalone-editor/ у headless Chrome: test-bs5-anon.html, test-bs5-cms-block.html, test-bs5-editor.html і test-bs5-clean-html.html. Він не вдається, коли:

  • сторінка кидає помилку JavaScript;
  • повний редактор не готовий за 2000 мс, або після завантаження не лишилося відкладених позаекранних елементів керування (ворота продуктивності);
  • елементи керування елементів перекриваються в режимі Power user (базове значення: нуль пар, що перекриваються);
  • збережений HTML сторінки повного редактора більший за еталон у 32 094 символи;
  • не вдається перевірка конкретної сторінки, наприклад розбір чистого HTML Bootstrap, хлібні крихти, Panel types, налаштування локального відео Muted або попередній перегляд блока CMS.

Сторінки завантажують зібрані файли з dxpr_builder/, тож спершу зберіть.

  1. Встановіть залежності:

    npm install
    
  2. Зберіть пакет редактора. Скрипт 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. Запустіть тест:

    npm run fe-test
    

    Використовуйте npm run fe-test:headed, щоб спостерігати браузер, і npm run fe-test:dev, щоб подавати автономні сторінки без запуску тверджень.

У CI .github/workflows/fe-test.yaml запускає той самий тест через Docker:

docker compose --profile fe-test run --rm fe-test

Наскрізні тести Drush

scripts/drush-e2e/run-e2e-tests.sh встановлює свіжий сайт Drupal 11 із SQLite всередині контейнера Composer, симлінкує в нього модуль, вмикає його, створює тип вмісту Basic page із форматувальником dxpr_builder_text, шаблон сторінки та шаблон користувача, потім запускає кожен файл scripts/drush-e2e/test-*.sh:

Файл Команди під тестом
test-cleartext-key-update.sh Оновлення 9026 очищує відкритий текст ключа продукту, лишений у сховищі модуля Key, і зберігає його, коли вибраного Key немає (cleartext-key-update.php)
test-cms-cache-tags.sh Інвалідація кешу списків блоків і подань (cms-cache-tags.php)
test-elements.sh drush dxb:element:list
test-migration-summary.sh Формулювання однини та множини підсумку колонки міграції (migration-summary.php)
test-migrations.sh drush dxb:migrate і регресії міграцій вмісту (migration-regressions.php)
test-page-controller.sh Збірки контролера сторінок для його маршрутів (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 Модуль Drag and Drop Page постачає кожну конфігурацію, яку перелічує (page-module.php)
test-profile-buttons.sh Кнопки текстового редактора профілів конструктора (profile-buttons.php)
test-profile-order.sh Який профіль застосовується за вагою, і порядок списку профілів (profile-order.php)
test-settings-form.sh Збереження та перевірка ключа продукту на General Settings, і синхронізація ліцензії, яку воно запускає (settings-form.php)
test-setup-ai.sh drush dxb:setup-ai
test-templates.sh drush dxb:template:list
test-user-licenses-page.sh Картка ліцензії показується один раз на User Licenses і досі показується на People (user-licenses-page.php)
test-user-settings.sh Власні налаштування редактора кожного редактора (user-settings.php)
test-user-templates.sh drush dxb:user-template:list, drush dxb:user-template:create

Запустіть усі:

docker compose --profile drush-e2e run --rm e2e-test

Запустіть один файл, передавши частину його імені; скрипт зіставляє scripts/drush-e2e/test-*<filter>*.sh:

docker compose --profile drush-e2e run --rm e2e-test page-create

Щоб додати тест, створіть scripts/drush-e2e/test-<name>.sh, викличте section "<Title>", і використовуйте помічників із scripts/drush-e2e/_helpers.sh: assert_success, assert_fail, assert_eq, assert_has, assert_not_empty, assert_runs і assert_dry_run. Кожен помічник приймає опис і рядок команди.

У CI цей набір це завдання «Run Drush E2E tests» у .github/workflows/review.yaml. Він запускається, коли пул-реквест змінює файли .php, .module, .inc, .install, .yml, .md, composer.json або composer.lock.

Набір візуальної регресії Selenium

Браузерні тести це набори Java TestNG. Вони живуть у репозиторії dxpr_maven і запускаються проти стека Docker, визначеного в docker-compose.test.yml (хаб Selenium, ноди Chrome та контейнер Maven), на сайті, встановленому з цього репозиторію. Ви не запускаєте їх із локального клону; ви запускаєте їх коментарем пул-реквесту. .github/workflows/command-dispatcher.yml перетворює коментар на запуск робочого процесу.

Команда Набір Робочий процес
/e2e chrome.editor.bs5.parallel.xml плюс анонімний набір BS5 e2e-command.yaml
/e2e-bs3 chrome.editor.bs3.parallel.xml e2e-bs3-command.yml
/e2eV2 Набори редактора BS5 та анонімні набори на стеку DXPR CMS e2eV2-command.yaml
/qa-demo-2x-dxpr_theme6x-tests QA-демо з DXPR Theme 6.x qa-demo-2x-dxpr_theme6x-tests-command.yaml

Параметри, як задокументовано в CONTRIBUTING.md:

  • groups=row-element-test,icon-element-test запускає іменовані групи <test name="..."> із XML набору.
  • tests=RowColumnLayoutVisualTest запускає іменовані тестові класи.
  • maven_ref=branch-name використовує гілку dxpr_maven, так зміна конструктора та її оновлення тесту переглядаються разом.

Робочий процес завантажує target/reports/** і скриншоти як артефакт збірки й публікує результат коментарем до пул-реквесту, перелічуючи невдачі або тести, які пройшли лише з повтору. Кожне завдання набору має 90-хвилинний тайм-аут.

Лінтери та статичний аналіз

Кожен лінтер це служба Docker Compose, тож локальний інструментарій поза Docker не потрібен.

Служба Команда Що перевіряє
drupal-lint docker compose run --rm drupal-lint Стандарти Drupal і DrupalPractice для phpcs із PHPCompatibility (PHP 8.3 і вище)
drupal-check-D11 docker compose run --rm drupal-check-D11 PHPStan рівня 5 з mglaman/phpstan-drupal всередині свіжого drupal/recommended-project
eslint docker compose run --rm eslint ESLint на js/ і dxpr_builder/build/, плюс перевірка орфографії dxpr_builder/extracted_t_functions.js
stylelint docker compose run --rm stylelint Stylelint на dxpr_builder/sass/ і sass/
rust-lint docker compose run --rm rust-lint Clippy на Rust-джерелах у rust/
no-jquery, no-underscore, html-in-js docker compose run --rm <service> Детектори застарілості з .github/workflows/deprecations.yml

Варіанти автовправлень існують для phpcs, ESLint і Stylelint (drupal-lint-auto-fix, eslint-auto-fix, stylelint-auto-fix). Ті самі перевірки доступні без Docker через npm run lint:scss, npm run lint:no-jquery, npm run lint:no-underscore і npm run lint:html-in-js.

npm install також встановлює хук pre-commit Husky (.husky/pre-commit). Він запускає відповідні служби автовправлень і лінтингу на підготовлених файлах JavaScript, PHP і SCSS та Rust-джерелах, і docs/video-tools/bin/lint-videos.mjs, коли підготовлено файли під docs/.

.github/workflows/review.yaml запускає лінтери, які відповідають зміненим шляхам, на кожному пул-реквесті. .github/workflows/main.yaml запускає drupal-lint, eslint, drupal-check-D11 і rust-lint на кожному пуші до 3.x. Обидва провалюють збірку, коли перевірка не вдається, і пишуть підсумок із файлами-порушниками.

Що далі?