Testes.
O DXPR Builder tem quatro tipos de verificações automatizadas: um teste Puppeteer do
editor, testes Bash de ponta a ponta para os comandos Drush, uma suite Selenium
de regressão visual no repositório separado dxpr_maven, e
linters. Esta página enumera cada uma, como a correr localmente e como a CI
a corre.
O que existe
| Check | Where it lives | Runs on |
|---|---|---|
| Teste de consola e esquema do editor | test/test-editor.js |
Pull requests que tocam JavaScript, HTML ou test/ (.github/workflows/fe-test.yaml) |
| Testes Drush de ponta a ponta | scripts/drush-e2e/ |
Pull requests que tocam PHP, YAML ou Markdown (.github/workflows/review.yaml) |
| Suite Selenium de regressão visual | dxpr_maven, o repositório |
Comandos em comentários de PR (.github/workflows/e2e-command.yaml, e2e-bs3-command.yml, e2eV2-command.yaml) |
| Padrões de código PHP (phpcs) | scripts/linters/run-drupal-lint.sh, phpcs.xml.dist |
Pull requests que tocam PHP, YAML ou Markdown; cada push para 3.x |
| PHPStan | scripts/linters/run-drupal-check.sh |
Pull requests que tocam PHP, YAML ou Markdown; cada push para 3.x |
| ESLint, Stylelint, Rust Clippy | scripts/linters/ |
Pull requests, filtrados por caminhos alterados |
| Detetores de depreciação | .github/workflows/deprecations.yml |
Pull requests que tocam js/ ou dxpr_builder/build/ |
Verificações de docs (markdownlint, check_docs.py, Vale) |
.markdownlint-cli2.yaml, docs/lint/, .vale.ini |
Pull requests que tocam docs/ (review.yaml) |
O único teste PHPUnit no repositório é
modules/dxpr_builder_media/tests/src/FunctionalJavascript/MediaEntityBrowserTest.php
para o submódulo legado de multimédia. Nenhum fluxo de GitHub o corre; o
pipeline GitLab de drupal.org (.gitlab-ci.yml) usa os modelos
DrupalCI padrão, cuja tarefa PHPUnit não está desligada lá.
Teste de consola do editor
test/test-editor.js inicia um servidor estático na porta 3000
(test/start-standalone-server.js) e abre quatro páginas autónomas
de test/standalone-editor/ em Chrome headless:
test-bs5-anon.html, test-bs5-cms-block.html,
test-bs5-editor.html e test-bs5-clean-html.html. Falha
quando:
- uma página lança um erro JavaScript;
- o editor completo não está pronto em 2000 ms, ou restam controlos fora do ecrã adiados após o carregamento (a fasquia de desempenho);
- os controlos de elemento sobrepõem-se no modo de utilizador avançado (a referência é zero pares sobrepostos);
- o HTML guardado da página do editor completo é maior do que a referência de 32 094 carateres;
- uma verificação específica de página falha, por exemplo a análise de HTML Bootstrap limpo, o breadcrumb, os tipos de painel, o vídeo local, a definição Muted ou a pré-visualização de bloco CMS.
As páginas carregam os ficheiros compilados de dxpr_builder/, por isso compile primeiro.
-
Instale as dependências:
npm install -
Compile o pacote do editor. O script de CI corre estas tarefas por esta ordem (
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 -
Corra o teste:
npm run fe-testUse
npm run fe-test:headedpara ver o navegador, enpm run fe-test:devpara servir as páginas autónomas sem correr asserções.
Na CI, .github/workflows/fe-test.yaml corre o mesmo teste através de
Docker:
docker compose --profile fe-test run --rm fe-test
Testes Drush de ponta a ponta
scripts/drush-e2e/run-e2e-tests.sh instala um site Drupal 11 novo com
SQLite dentro de um contentor Composer, liga o módulo por symlink,
ativa-o, cria um tipo de conteúdo Basic page com o
formatador dxpr_builder_text, um modelo de página e um modelo de utilizador,
e depois corre cada ficheiro scripts/drush-e2e/test-*.sh:
| File | Commands under test |
|---|---|
test-cleartext-key-update.sh |
A atualização 9026 limpa uma chave de produto em texto claro deixada no armazenamento do módulo Key, e mantém-na quando a Key escolhida desapareceu (cleartext-key-update.php) |
test-cms-cache-tags.sh |
Invalidação de cache das listagens de blocos e vistas (cms-cache-tags.php) |
test-elements.sh |
drush dxb:element:list |
test-migration-summary.sh |
Redação singular e plural do resumo da coluna de migração (migration-summary.php) |
test-migrations.sh |
drush dxb:migrate e regressões de migração de conteúdo (migration-regressions.php) |
test-page-controller.sh |
As construções do controlador de página para as rotas (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 |
O módulo Drag and Drop Page traz toda a configuração que enumera (page-module.php) |
test-profile-buttons.sh |
Botões do editor de texto de perfis do construtor (profile-buttons.php) |
test-profile-order.sh |
Que perfil se aplica por peso, e a ordem da lista de perfis (profile-order.php) |
test-settings-form.sh |
Guardar e validar a chave de produto em General Settings, e a sincronização de licença que desencadeia (settings-form.php) |
test-setup-ai.sh |
drush dxb:setup-ai |
test-templates.sh |
drush dxb:template:list |
test-user-licenses-page.sh |
O cartão de licença aparece uma vez em User Licenses e continua a aparecer em People (user-licenses-page.php) |
test-user-settings.sh |
As definições de editor próprias de cada editor (user-settings.php) |
test-user-templates.sh |
drush dxb:user-template:list, drush dxb:user-template:create |
Corra todos:
docker compose --profile drush-e2e run --rm e2e-test
Corra um ficheiro passando parte do nome; o script corresponde a
scripts/drush-e2e/test-*<filter>*.sh:
docker compose --profile drush-e2e run --rm e2e-test page-create
Para adicionar um teste, crie scripts/drush-e2e/test-<name>.sh, chame
section "<Title>", e use os auxiliares de
scripts/drush-e2e/_helpers.sh: assert_success, assert_fail,
assert_eq, assert_has, assert_not_empty, assert_runs e
assert_dry_run. Cada auxiliar recebe uma descrição e uma cadeia
de comando.
Na CI, esta suite é a tarefa "Run Drush E2E tests" em
.github/workflows/review.yaml. Corre quando um pull request muda
ficheiros .php, .module, .inc, .install, .yml, .md, composer.json
ou composer.lock.
Suite Selenium de regressão visual
Os testes de navegador são suites Java TestNG no repositório
dxpr_maven. Correm contra uma stack Docker definida em
docker-compose.test.yml (hub Selenium, nós Chrome e um contentor
Maven) num site instalado a partir deste repositório. Não os corre
a partir de uma cópia local; desencadeia-os a partir de um comentário
de pull request. .github/workflows/command-dispatcher.yml transforma o comentário
numa execução de fluxo.
| Command | Suite | Workflow |
|---|---|---|
/e2e |
chrome.editor.bs5.parallel.xml mais a suite BS5 anónima |
e2e-command.yaml |
/e2e-bs3 |
chrome.editor.bs3.parallel.xml |
e2e-bs3-command.yml |
/e2eV2 |
Suites de editor e anónima BS5 na stack DXPR CMS | e2eV2-command.yaml |
/qa-demo-2x-dxpr_theme6x-tests |
Demo QA com DXPR Theme 6.x | qa-demo-2x-dxpr_theme6x-tests-command.yaml |
Opções, como documentado em CONTRIBUTING.md:
groups=row-element-test,icon-element-testcorre os grupos<test name="...">indicados do XML da suite.tests=RowColumnLayoutVisualTestcorre as classes de teste indicadas.maven_ref=branch-nameusa um ramodxpr_maven, que é como uma alteração do construtor e a atualização de teste são revistas juntas.
O fluxo carrega target/reports/** e as capturas de ecrã como
artefacto de compilação e publica o resultado como comentário no pull
request, enumerando falhas ou testes que só passaram à segunda. Cada
tarefa de suite tem um tempo limite de 90 minutos.
Linters e análise estática
Cada linter é um serviço Docker Compose, por isso não é precisa toolchain local além de Docker.
| Service | Command | What it checks |
|---|---|---|
drupal-lint |
docker compose run --rm drupal-lint |
phpcs com PHPCompatibility (PHP 8.3 e acima), Drupal e DrupalPractice aplicados |
drupal-check-D11 |
docker compose run --rm drupal-check-D11 |
PHPStan nível 5 com mglaman/phpstan-drupal dentro de um novo drupal/recommended-project |
eslint |
docker compose run --rm eslint |
ESLint em js/ e dxpr_builder/build/, mais verificação ortográfica de dxpr_builder/extracted_t_functions.js |
stylelint |
docker compose run --rm stylelint |
Stylelint em dxpr_builder/sass/ e sass/ |
rust-lint |
docker compose run --rm rust-lint |
Clippy nas fontes Rust em rust/ |
no-jquery, no-underscore, html-in-js |
docker compose run --rm <service> |
Detetores de depreciação de .github/workflows/deprecations.yml |
Existem variantes de correção automática para phpcs, ESLint e Stylelint
(drupal-lint-auto-fix, eslint-auto-fix, stylelint-auto-fix).
As mesmas verificações existem sem Docker através de npm run lint:scss, npm run lint:no-jquery, npm run lint:no-underscore
e npm run lint:html-in-js.
npm install também instala um hook pre-commit Husky
(.husky/pre-commit). Corre a correção automática e os serviços de lint
correspondentes nos ficheiros JavaScript, PHP e SCSS em stage e nas fontes Rust,
e docs/video-tools/bin/lint-videos.mjs quando há ficheiros sob
docs/ em stage.
.github/workflows/review.yaml corre os linters que correspondem aos
caminhos alterados em cada pull request. .github/workflows/main.yaml
corre drupal-lint, eslint, drupal-check-D11 e rust-lint em
cada push para 3.x. Ambos falham a compilação quando uma verificação falha e
escrevem um resumo com os ficheiros infratores.
O que se segue?
- Contribuir para o processo de pull request e
o fluxo
maven_refpara atualizações de teste. - Comandos Drush para os comandos que a suite Bash exercita.