الاختبار.

Learn DXPR BuilderExtendTooling

يملك DXPR Builder أربعة أنواع من الفحوص الآلية: اختبار Puppeteer للمحرّر، واختبارات Bash الشاملة لأوامر Drush، ومجموعة Selenium للانحدار البصري في مستودع dxpr_maven المنفصل، والمدققات. تسرد هذه الصفحة كلًا منها وكيفية تشغيله محليًا وكيفية تشغيله في 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 (مستودع) أوامر تعليقات طلبات السحب (.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/ في Chrome دون واجهة: test-bs5-anon.html وtest-bs5-cms-block.html و test-bs5-editor.html وtest-bs5-clean-html.html. فيفشل عندما:

  • ترمي صفحة خطأ JavaScript؛
  • لا يجهز المحرّر الكامل خلال 2000 مللي ثانية، أو لا تبقى عناصر تحكم خارج الشاشة مؤجلة بعد التحميل (بوابة الأداء)؛
  • تتداخل عناصر تحكم العناصر في وضع المستخدم المتمرس (الأساس صفر أزواج متداخلة)؛
  • يكون HTML المحفوظ لصفحة المحرّر الكامل أكبر من المرجع البالغ 32,094 حرفًا؛
  • يفشل فحص خاص بصفحة، مثل تحليل HTML النظيف لـ Bootstrap أو مسار التنقل أو أنواع اللوحات أو إعداد كتم الصوت للفيديو المحلي أو معاينة كتلة 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 يثبّت موقع Drupal 11 جديدًا مع SQLite داخل حاوية Composer، ويربط الوحدة فيه رمزيًا، ويفعّلها، وينشئ نوع محتوى صفحة أساسية بالمُنسِّق dxpr_builder_text وقالب صفحة وقالب مستخدم، ثم يشغّل كل ملف 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 تشحن وحدة صفحة السحب والإفلات كل إعداد تسرده (page-module.php)
test-profile-buttons.sh أزرار محرر النصوص لملفات المنشئ (profile-buttons.php)
test-profile-order.sh أي ملف ينطبق حسب الترتيب، وترتيب قائمة الملفات (profile-order.php)
test-settings-form.sh حفظ مفتاح المنتج والتحقق منه على الإعدادات العامة، ومزامنة الترخيص التي يشغّلها (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-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

شغّلوا ملفًا واحدًا بتمرير جزء من اسمه؛ فيطابق النص 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 تكون هذه المجموعة مهمة "Run Drush E2E tests" في .github/workflows/review.yaml. وهي تعمل عندما يغيّر طلب السحب ملفات .php أو .module أو .inc أو .install أو .yml أو .md أو composer.json أو composer.lock.

مجموعة Selenium للانحدار البصري

اختبارات المتصفح مجموعات Java TestNG في مستودع dxpr_maven. وهي تعمل مقابل بنية Docker معرّفة في docker-compose.test.yml (مركز 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 مجموعتا محرّر BS5 والمجهول على بنية DXPR CMS e2eV2-command.yaml
/qa-demo-2x-dxpr_theme6x-tests عرض ضمان الجودة مع قالب DXPR 6.x qa-demo-2x-dxpr_theme6x-tests-command.yaml

الخيارات، كما هي موثقة في CONTRIBUTING.md:

  • groups=row-element-test,icon-element-test يشغّل مجموعات <test name="..."> المُسمّاة من XML المجموعة.
  • tests=RowColumnLayoutVisualTest يشغّل فئات الاختبار المُسمّاة.
  • maven_ref=branch-name يستخدم فرع dxpr_maven، وهي الطريقة التي يُراجَع بها تغيير المنشئ وتحديث اختباره معًا.

يرفع سير العمل target/reports/** ولقطات الشاشة كأثر بناء وينشر النتيجة تعليقًا على طلب السحب، مُدرجًا الإخفاقات أو الاختبارات التي نجحت فقط عند إعادة المحاولة. ولكل مهمة مجموعة مهلة 90 دقيقة.

المدققات والتحليل الثابت

كل مدقق خدمة Docker Compose، فلا حاجة لأدوات محلية غير Docker.

الخدمة الأمر ما يفحصه
drupal-lint docker compose run --rm drupal-lint phpcs مع PHPCompatibility (‏PHP 8.3 فصاعدًا) ومعايير Drupal وDrupalPractice المعتمدة
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 Clippy على مصادر Rust في 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). وتتوفر الفحوصات نفسها دون Docker عبر npm run lint:scss وnpm run lint:no-jquery وnpm run lint:no-underscore وnpm run lint:html-in-js.

npm install يثبّت أيضًا خطاف Husky السابق للالتزام (.husky/pre-commit). فهو يشغّل الإصلاح التلقائي المطابق وخدمات الفحص على ملفات JavaScript وPHP وSCSS المُجهَّزة ومصادر Rust، وdocs/video-tools/bin/lint-videos.mjs عندما تكون الملفات تحت docs/ مُجهَّزة.

.github/workflows/review.yaml يشغّل المدققات المطابقة للمسارات المغيَّرة على كل طلب سحب. ويشغّل .github/workflows/main.yaml drupal-lint وeslint وdrupal-check-D11 وrust-lint على كل دفع إلى 3.x. ويفشل كلاهما البناء عند فشل فحص ويكتبان ملخصًا بالملفات المخالفة.

ما الخطوة التالية؟

  • المساهمة لعملية طلب السحب وسير عمل maven_ref لتحديثات الاختبار.
  • أوامر Drush للأوامر التي تتمرن عليها مجموعة Bash.