---
url: 'https://dxpr.com/uk/hc/%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D1%96%D1%8F/%D0%BD%D0%B0%D0%B2%D1%87%D0%B0%D0%BD%D0%BD%D1%8F-dxpr-builder/%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BA%D0%B0/%D1%82%D0%B5%D1%81%D1%82%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F'
title: 'Тестування | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T19:26:52+00:00'
updated: '2026-10-24T20:03:43+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: |-
  DXPR Builder має чотири види автоматизованих перевірок: тест редактора
  Puppeteer, наскрізні тести Bash для команд Drush, набір
  візуальної регресії Selenium в окремому репозиторії dxpr_maven, і
  лінтери. Ця сторінка перелічує кожну, як запускати її локально і як її
  запускає CI.
tags:
  - Tooling
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-24T20:03:43+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: Тестування
      description: |-
        DXPR Builder має чотири види автоматизованих перевірок: тест редактора
        Puppeteer, наскрізні тести Bash для команд Drush, набір
        візуальної регресії Selenium в окремому репозиторії dxpr_maven, і
        лінтери. Ця сторінка перелічує кожну, як запускати її локально і як її
        запускає CI.
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T19:26:52+0000'
      dateModified: '2026-10-24T20:03:43+0000'
      author:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      mainEntityOfPage: 'https://dxpr.com/uk/hc/%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D1%96%D1%8F/%D0%BD%D0%B0%D0%B2%D1%87%D0%B0%D0%BD%D0%BD%D1%8F-dxpr-builder/%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BA%D0%B0/%D1%82%D0%B5%D1%81%D1%82%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F'
      articleSection: Інструменти
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/uk/hc/%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D1%96%D1%8F/%D0%BD%D0%B0%D0%B2%D1%87%D0%B0%D0%BD%D0%BD%D1%8F-dxpr-builder/%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BA%D0%B0/%D1%82%D0%B5%D1%81%D1%82%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F'
      description: |-
        DXPR Builder має чотири види автоматизованих перевірок: тест редактора
        Puppeteer, наскрізні тести Bash для команд Drush, набір
        візуальної регресії Selenium в окремому репозиторії dxpr_maven, і
        лінтери. Ця сторінка перелічує кожну, як запускати її локально і як її
        запускає CI.
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Home
            item: 'https://dxpr.com/uk'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: uk
---
[Help Center](/uk/hc)/[Documentation](/uk/hc/%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D1%96%D1%8F) /[Вивчення DXPR Builder](/uk/hc/documentation/learn-dxpr-builder) /[Розширення](/uk/hc/documentation/learn-dxpr-builder/extend) /[Інструменти](/uk/hc/documentation/learn-dxpr-builder/extend/tooling) # Тестування.

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

   ## In this guide

 Related guides

- [Участь у розробці](/uk/hc/%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D1%96%D1%8F/%D0%BD%D0%B0%D0%B2%D1%87%D0%B0%D0%BD%D0%BD%D1%8F-dxpr-builder/%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BA%D0%B0/%D1%83%D1%87%D0%B0%D1%81%D1%82%D1%8C-%D1%83-%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D1%86%D1%96)
- [Команди Drush](/uk/hc/%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D1%96%D1%8F/%D0%BD%D0%B0%D0%B2%D1%87%D0%B0%D0%BD%D0%BD%D1%8F-dxpr-builder/%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BA%D0%B0/%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B8-drush)

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. Встановіть залежності:

    ```bash
    npm install

    ```
2. Зберіть пакет редактора. Скрипт CI запускає ці завдання в такому порядку (`test/scripts/run-fe-tests.sh`):

    ```bash
    npx grunt concat
    npx grunt exec:gen
    npx grunt babel
    npx grunt terser
    npx grunt sass
    npx grunt postcss

    ```
3. Запустіть тест:

    ```bash
    npm run fe-test

    ```

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

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

```bash
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` |

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

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

```

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

```bash
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`. Обидва провалюють збірку, коли перевірка не вдається, і пишуть підсумок із файлами-порушниками.

## Що далі?

- [Участь у розробці](/uk/hc/%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D1%96%D1%8F/%D0%BD%D0%B0%D0%B2%D1%87%D0%B0%D0%BD%D0%BD%D1%8F-dxpr-builder/%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BA%D0%B0/%D1%83%D1%87%D0%B0%D1%81%D1%82%D1%8C-%D1%83-%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D1%86%D1%96) для процесу пул-реквестів і робочого процесу `maven_ref` для оновлень тестів.
- [Команди Drush](/uk/hc/%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D1%96%D1%8F/%D0%BD%D0%B0%D0%B2%D1%87%D0%B0%D0%BD%D0%BD%D1%8F-dxpr-builder/%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BA%D0%B0/%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B8-drush) для команд, які вправляє набір Bash.