Pruebas.
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.
-
Instala dependencias:
npm install -
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 -
Ejecuta la prueba:
npm run fe-testUsa
npm run fe-test:headedpara mirar el navegador, ynpm run fe-test:devpara 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-testejecuta los grupos<test name="...">nombrados desde el XML de la suite.tests=RowColumnLayoutVisualTestejecuta las clases de pruebas nombradas.maven_ref=branch-nameusa una ramadxpr_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_refpara actualizaciones de pruebas. - Comandos Drush para los comandos que la suite Bash ejercita.