---
url: 'https://dxpr.com/pl/hc/dokumentacja/nauka-dxpr-builder/programowanie/testowanie'
title: 'Testowanie | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T11:38:53+00:00'
updated: '2026-10-24T17:19:22+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: '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.'
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-24T17:19:22+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: Testowanie
      description: '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.'
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T11:38:53+0000'
      dateModified: '2026-10-24T17:19:22+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/pl/hc/dokumentacja/nauka-dxpr-builder/programowanie/testowanie'
      articleSection: Narzędzia
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/pl/hc/dokumentacja/nauka-dxpr-builder/programowanie/testowanie'
      description: '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.'
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: 'Strona Główna'
            item: 'https://dxpr.com/pl'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: pl
---
[Centrum pomocy](/pl/hc)/[Dokumentacja](/pl/hc/dokumentacja) /[Poznaj DXPR Builder](/pl/hc/documentation/learn-dxpr-builder) /[Rozszerzenia](/pl/hc/documentation/learn-dxpr-builder/extend) /[Narzędzia](/pl/hc/documentation/learn-dxpr-builder/extend/tooling) # Testowanie.

 Poznaj DXPR BuilderRozszerzeniaNarzędzia

   ## W tym przewodniku

 Powiązane przewodniki

- [Jak współtworzyć projekt](/pl/hc/dokumentacja/nauka-dxpr-builder/programowanie/jak-wspoltworzyc-projekt)
- [Polecenia Drush](/pl/hc/dokumentacja/nauka-dxpr-builder/programowanie/polecenia-drush)

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:

    ```bash
    npm install

    ```
2. Zbuduj pakiet edytora. Skrypt CI uruchamia te zadania w tej kolejnoś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. Uruchom test:

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

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

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

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

- [Współtworzenie](/pl/hc/documentation/learn-dxpr-builder/development/contributing) dla procesu pull requestów i przebiegu `maven_ref` dla aktualizacji testów.
- [Polecenia Drush](/pl/hc/dokumentacja/nauka-dxpr-builder/programowanie/polecenia-drush) dla poleceń ćwiczonych przez pakiet Bash.