Pruebas.

Learn DXPR BuilderExtendTooling

DXPR Builder tiene cuatro tipos de comprobaciones automáticas: una prueba Puppeteer del editor, pruebas Bash de extremo a extremo para los comandos Drush, una suite Selenium de regresión visual en el repositorio separado dxpr_maven, y linters. Esta página enumera cada una, cómo ejecutarla en local y cómo la ejecuta CI.

Qué existe

Comprobación Dónde vive Se ejecuta en
Prueba de consola y diseño del editor test/test-editor.js Pull requests que tocan JavaScript, HTML o test/ (.github/workflows/fe-test.yaml)
Pruebas Drush de extremo a extremo scripts/drush-e2e/ Pull requests que tocan PHP, YAML o Markdown (.github/workflows/review.yaml)
Suite Selenium de regresión visual dxpr_maven como repositorio Comandos en comentarios de PR (.github/workflows/e2e-command.yaml, e2e-bs3-command.yml, e2eV2-command.yaml)
Estándares de código PHP (phpcs) scripts/linters/run-drupal-lint.sh, phpcs.xml.dist Pull requests que tocan PHP, YAML o Markdown; cada push a 3.x
PHPStan scripts/linters/run-drupal-check.sh Pull requests que tocan PHP, YAML o Markdown; cada push a 3.x
ESLint, Stylelint, Rust Clippy scripts/linters/ Pull requests, filtrados por rutas cambiadas
Detectores de obsolescencia .github/workflows/deprecations.yml Pull requests que tocan js/ o dxpr_builder/build/
Comprobaciones de docs (markdownlint, check_docs.py, Vale) .markdownlint-cli2.yaml, docs/lint/, .vale.ini Pull requests que tocan docs/ (review.yaml)

La única prueba PHPUnit en el repositorio es modules/dxpr_builder_media/tests/src/FunctionalJavascript/MediaEntityBrowserTest.php para el submódulo de medios heredado. Ningún flujo de GitHub la ejecuta; el pipeline GitLab de drupal.org (.gitlab-ci.yml) usa las plantillas estándar DrupalCI, cuyo trabajo PHPUnit no está desactivado ahí.

Prueba de consola del editor

test/test-editor.js arranca un servidor estático en el puerto 3000 (test/start-standalone-server.js) y abre cuatro páginas independientes de test/standalone-editor/ en Chrome headless: test-bs5-anon.html, test-bs5-cms-block.html, test-bs5-editor.html y test-bs5-clean-html.html. Falla cuando:

  • una página lanza un error JavaScript;
  • el editor completo no está listo en 2000 ms, o quedan controles fuera de pantalla diferidos tras la carga (la puerta de rendimiento);
  • los controles de elementos se solapan en modo Power user (la base es cero pares solapados);
  • el HTML guardado de la página de editor completo es mayor que la referencia de 32.094 caracteres;
  • falla una comprobación propia de una página, por ejemplo el análisis de HTML Bootstrap limpio, la miga de pan, los tipos de panel, el ajuste Muted de vídeo local o la vista previa de bloque CMS.

Las páginas cargan los archivos compilados desde dxpr_builder/, así que compila primero.

  1. Instala dependencias:

    npm install
    
  2. Compila el paquete del editor. El script CI ejecuta estas tareas en este orden (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. Ejecuta la prueba:

    npm run fe-test
    

    Usa npm run fe-test:headed para mirar el navegador, y npm run fe-test:dev para servir las páginas independientes sin ejecutar aserciones.

En CI, .github/workflows/fe-test.yaml ejecuta la misma prueba con Docker:

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

Pruebas Drush de extremo a extremo

scripts/drush-e2e/run-e2e-tests.sh instala un sitio Drupal 11 fresco con SQLite dentro de un contenedor Composer, enlaza el módulo en él, lo habilita, crea un tipo de contenido Basic page con el formato dxpr_builder_text, una plantilla de página y una plantilla de usuario, y luego ejecuta cada archivo scripts/drush-e2e/test-*.sh:

Archivo Comandos bajo prueba
test-cleartext-key-update.sh El update 9026 limpia una clave de producto en texto claro dejada en almacenamiento Key module, y la conserva cuando la Key elegida no existe (cleartext-key-update.php)
test-cms-cache-tags.sh Invalidación de caché de listados de bloques y vistas (cms-cache-tags.php)
test-elements.sh drush dxb:element:list
test-migration-summary.sh Redacción en singular y plural del resumen de columna de migración (migration-summary.php)
test-migrations.sh drush dxb:migrate y regresiones de migración de contenido (migration-regressions.php)
test-page-controller.sh El controlador de página crea para sus rutas (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 El módulo Drag and Drop Page incluye cada configuración que enumera (page-module.php)
test-profile-buttons.sh Botones del editor de texto de perfiles del constructor (profile-buttons.php)
test-profile-order.sh Qué perfil se aplica por peso, y el orden de la lista de perfiles (profile-order.php)
test-settings-form.sh Guardar y validar la clave de producto en General Settings, y la sincronización de licencia que activa (settings-form.php)
test-setup-ai.sh drush dxb:setup-ai
test-templates.sh drush dxb:template:list
test-user-licenses-page.sh La tarjeta de licencia se muestra una vez en User Licenses y aún se muestra en People (user-licenses-page.php)
test-user-settings.sh Ajustes de editor propios de cada persona que edita (user-settings.php)
test-user-templates.sh drush dxb:user-template:list, drush dxb:user-template:create

Ejecútalas todas:

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

Ejecuta un archivo pasando parte de su nombre; el script coincide con scripts/drush-e2e/test-*<filter>*.sh:

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

Para añadir una prueba, crea scripts/drush-e2e/test-<name>.sh, llama a section "<Title>", y usa las ayudas de scripts/drush-e2e/_helpers.sh: assert_success, assert_fail, assert_eq, assert_has, assert_not_empty, assert_runs y assert_dry_run. Cada ayuda toma una descripción y una cadena de comando.

En CI esta suite es el trabajo "Run Drush E2E tests" en .github/workflows/review.yaml. Se ejecuta cuando un pull request cambia archivos .php, .module, .inc, .install, .yml, .md, composer.json o composer.lock.

Suite Selenium de regresión visual

Las pruebas de navegador son suites Java TestNG en el repositorio dxpr_maven. Se ejecutan contra una pila Docker definida en docker-compose.test.yml (hub Selenium, nodos Chrome y un contenedor Maven) en un sitio instalado desde este repositorio. No las ejecutas desde una copia local; las activas desde un comentario en un pull request. .github/workflows/command-dispatcher.yml convierte el comentario en una ejecución de flujo.

Comando Suite Flujo
/e2e chrome.editor.bs5.parallel.xml más la suite anónima BS5 e2e-command.yaml
/e2e-bs3 chrome.editor.bs3.parallel.xml e2e-bs3-command.yml
/e2eV2 Suites BS5 de editor y anónimas en la pila DXPR CMS e2eV2-command.yaml
/qa-demo-2x-dxpr_theme6x-tests Entorno de demostración QA con DXPR Theme 6.x qa-demo-2x-dxpr_theme6x-tests-command.yaml

Opciones, como se documenta en CONTRIBUTING.md:

  • groups=row-element-test,icon-element-test ejecuta los grupos <test name="..."> nombrados desde el XML de la suite.
  • tests=RowColumnLayoutVisualTest ejecuta las clases de pruebas nombradas.
  • maven_ref=branch-name usa una rama dxpr_maven, que es como un cambio del constructor y su actualización de pruebas se revisan juntos.

El flujo sube target/reports/** y las capturas como artefacto de compilación y publica el resultado como comentario en el pull request, enumerando fallos o pruebas que solo pasaron al reintentar. Cada trabajo de suite tiene un tiempo de espera de 90 minutos.

Linters y análisis estático

Cada linter es un servicio Docker Compose, así que no se necesita cadena de herramientas local más allá de Docker.

Servicio Comando Qué comprueba
drupal-lint docker compose run --rm drupal-lint phpcs con PHPCompatibility (PHP 8.3 y superior), estándares Drupal y DrupalPractice correspondientes
drupal-check-D11 docker compose run --rm drupal-check-D11 PHPStan nivel 5 con mglaman/phpstan-drupal dentro de un nuevo drupal/recommended-project
eslint docker compose run --rm eslint ESLint en js/ y dxpr_builder/build/, más revisión ortográfica de dxpr_builder/extracted_t_functions.js
stylelint docker compose run --rm stylelint Stylelint en dxpr_builder/sass/ y sass/
rust-lint docker compose run --rm rust-lint Clippy en los fuentes Rust en rust/
no-jquery, no-underscore, html-in-js docker compose run --rm <service> Detectores de obsolescencia de .github/workflows/deprecations.yml

Existen variantes de corrección automática para phpcs, ESLint y Stylelint (drupal-lint-auto-fix, eslint-auto-fix, stylelint-auto-fix). Las mismas comprobaciones están disponibles sin Docker con npm run lint:scss, npm run lint:no-jquery, npm run lint:no-underscore y npm run lint:html-in-js.

npm install también instala un hook pre-commit de Husky (.husky/pre-commit). Ejecuta los servicios de corrección automática y lint coincidentes en los archivos JavaScript, PHP y SCSS en staging y los fuentes Rust, y docs/video-tools/bin/lint-videos.mjs cuando archivos en docs/ están en staging.

.github/workflows/review.yaml ejecuta los linters que coinciden con las rutas cambiadas en cada pull request. .github/workflows/main.yaml ejecuta drupal-lint, eslint, drupal-check-D11 y rust-lint en cada push a 3.x. Ambos fallan la compilación cuando falla una comprobación y escriben un resumen con los archivos infractores.

¿Qué sigue?

  • Cómo contribuir para el proceso de pull request y el flujo maven_ref para actualizaciones de pruebas.
  • Comandos Drush para los comandos que la suite Bash ejercita.