الاختبار.
يملك 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/، فابنوا أولًا.
-
ثبّتوا الاعتماديات:
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 يثبّت موقع 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.