テスト.
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/からビルド済みファイルを読み込むため、先にビルドします。
-
依存関係をインストールします。
npm install -
エディターバンドルをビルドします。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 -
テストを実行します。
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を実行します。両方ともチェック失敗でビルドを失敗させ、問題ファイル付きのサマリーを書きます。
次のステップ
- コントリビューション:プルリクエスト過程とテスト更新用の
maven_refワークフローに。 - Drushコマンド:Bashスイートが実行するコマンドに。