Тестування.
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/, тож спершу зберіть.
-
Встановіть залежності:
npm install -
Зберіть пакет редактора. Скрипт 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 -
Запустіть тест:
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. Обидва провалюють збірку, коли перевірка не вдається, і
пишуть підсумок із файлами-порушниками.
Що далі?
- Участь у розробці для процесу пул-реквестів і
робочого процесу
maven_refдля оновлень тестів. - Команди Drush для команд, які вправляє набір Bash.