テスト.

Learn DXPR BuilderExtendTooling

DXPR Builderには4種類の自動チェックがあります。エディターのPuppeteerテスト、DrushコマンドのBashエンドツーエンドテスト、別リポジトリdxpr_mavenのSeleniumビジュアルリグレッションスイート、リンターです。このページでは各項目、ローカルでの実行方法、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ワークフローは実行しません。drupal.orgのGitLabパイプライン(.gitlab-ci.yml)は標準のDrupalCIテンプレートを使い、PHPUnitジョブはそこでオフになっていません。

エディターコンソールテスト

test/test-editor.jsはポート3000で静的サーバーを起動し(test/start-standalone-server.js)、test/standalone-editor/から4つのスタンドアロンページをヘッドレス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文字のリファレンスより大きい場合。
  • ページ固有チェックの失敗。例えばクリーンなBootstrap HTMLの解析、パンくず、Panelタイプ、ローカル動画のMuted設定、CMSブロックプレビュー。

ページはdxpr_builder/からビルド済みファイルを読み込むため、先にビルドします。

  1. 依存関係をインストールします。

    npm install
    
  2. エディターバンドルをビルドします。CIスクリプトはこの順序でタスクを実行します(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. テストを実行します。

    npm run fe-test
    

    ブラウザーを見るにはnpm run fe-test:headedを使い、アサーションなしでスタンドアロンページを提供するにはnpm run fe-test:devを使います。

CIでは.github/workflows/fe-test.yamlが同じテストをDockerで実行します。

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

Drushエンドツーエンドテスト

scripts/drush-e2e/run-e2e-tests.shはComposerコンテナ内にSQLite付きの新規Drupal 11サイトをインストールし、モジュールをシンボリックリンクして有効化します。dxpr_builder_textフォーマッター付きのBasicページコンテンツタイプ、ページテンプレート、利用者テンプレートを作り、すべての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 Builderプロフィールのテキストエディターボタン(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に1度表示され、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

すべて実行します。

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

1ファイルの実行は名前の一部を渡します。スクリプトはscripts/drush-e2e/test-*<filter>*.shに一致します。

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ではこのスイートが.github/workflows/review.yamlの「Run Drush E2E tests」ジョブです。プルリクエストが.php、.module、.inc、.install、.yml、.md、composer.json、composer.lockファイルを変更すると実行されます。

Seleniumビジュアルリグレッションスイート

ブラウザーテストはdxpr_mavenリポジトリのJava TestNGスイートです。docker-compose.test.ymlで定義されたDockerスタック(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 DXPR CMSスタック上のBS5エディター・匿名スイート e2eV2-command.yaml
/qa-demo-2x-dxpr_theme6x-tests DXPR Theme 6.xのQAデモ qa-demo-2x-dxpr_theme6x-tests-command.yaml

オプション(CONTRIBUTING.mdの記載通り)。

  • groups=row-element-test,icon-element-testはスイートXMLの指定<test name="...">グループを実行します。
  • tests=RowColumnLayoutVisualTestは指定テストクラスを実行します。
  • maven_ref=branch-nameはdxpr_mavenブランチを使います。Builder変更とテスト更新を一緒にレビューする方法です。

ワークフローはtarget/reports/**とスクリーンショットをビルド成果物としてアップロードし、結果をプルリクエストのコメントに投稿します。失敗や再試行でのみ通ったテストを列挙します。各スイートジョブは90分のタイムアウトです。

リンターと静的解析

各リンターはDocker Composeサービスのため、Docker以外のローカルツールチェーンは不要です。

サービス コマンド チェック内容
drupal-lint docker compose run --rm drupal-lint PHPCompatibility(PHP 8.3以降)、Drupal、DrupalPractice標準のphpcs
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 RustソースのClippyは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)。同じチェックはnpm run lint:scss、npm run lint:no-jquery、npm run lint:no-underscore、npm run lint:html-in-jsでDockerなしでも利用できます。

npm installはHuskyのpre-commitフック(.husky/pre-commit)もインストールします。ステージされたJavaScript、PHP、SCSSファイルとRustソースに一致する自動修正・lintサービスを実行します。docs/video-tools/bin/lint-videos.mjsはdocs/配下のファイルがステージされた場合に実行します。

.github/workflows/review.yamlは全プルリクエストで変更パスに一致するリンターを実行します。.github/workflows/main.yamlは3.xへの全プッシュでdrupal-lint、eslint、drupal-check-D11、rust-lintを実行します。両方ともチェック失敗でビルドを失敗させ、問題ファイル付きのサマリーを書きます。

次のステップ