تخطَّ إلى المحتوى

الاختبار

الإعداد

افحص تغييرك على جهازك قبل أن ترسله.

  • أكمل الإعداد. اختبارات Go تقدّم تطبيق الويب المبني، فابنِه أولًا.

  • ثبّت متصفح الاختبار مرة واحدة:

    Terminal window
    npx --prefix app/frontend playwright install chromium

شغّل الفحوص اليومية

رابط إلى شغّل الفحوص اليومية
  1. ابنِ شيفرة Go وافحصها بـ vet:

    Terminal window
    go build ./...
    go vet ./...
  2. شغّل اختبارات Go:

    Terminal window
    go test ./...
  3. افحص تطبيق الويب واختبره:

    Terminal window
    npm --prefix app/frontend run check
    npm --prefix app/frontend run lint
    npm --prefix app/frontend run test
  4. شغّل قواعد الطبقات وتنظيم الملفات:

    Terminal window
    go test -tags structure ./app/backend/tools/structurecheck

سترى أنه لا يوجد أي فشل. يشغّل CI الأوامر نفسها، وأوامر Go منها على amd64 وarm64، ومعها تشغيل واحد بكاشف التسابق (go test -race ./...).

شغّل الاختبارات الشاملة

رابط إلى شغّل الاختبارات الشاملة

الاختبارات الشاملة (end-to-end) تقود متصفحًا حقيقيًا أمام برنامج حقيقي. شغّل مشروع الجزء الذي لمسته:

Terminal window
npm --prefix app/frontend run e2e -- --project=movies

يشغّل الاختبار نسخته الخاصة من HolyArrs على مجلد إعدادات جديد. ينشئ مشروع setup المالك أولًا، ومعظم المشاريع الأخرى تنتظره. شغّل المجموعة كاملة بلا --project قبل نشر أي إصدار من التطبيق.

أي المشاريع تشغّل

رابط إلى أي المشاريع تشغّل
غيّرت شغّل
الأفلام movies
المسلسلات shows
الطلبات requests, lists, reports
التنزيلات sources, downloaders, downloads
تسجيل الدخول والمستخدمين accounts, kid
سلامة النظام والجداول الزمنية schedules, controls
تخطيط الصفحات desktop, phone, a11y

أسماء المشاريع معرّفة في app/frontend/playwright.config.ts. المشروع الذي يعتمد على مشروع آخر يشغّله أولًا.

أين يوضع الاختبار الجديد

رابط إلى أين يوضع الاختبار الجديد
النوع المكان
Go بجانب الملف الذي يختبره
اختبار وحدة للويب بجانب ملفه، باسم name.test.ts
اختبار شامل app/tests/<module>/

لا تتصل بخدمة خارجية حقيقية أبدًا. أضف بديلًا وهميًا تحت app/tests/fakes. الاختبار الذي ينجح على جهازك فقط اختبار معطوب.

العَرَض. يفشل أحد فحوص البنية. السبب. الرسالة تسمّي الملف والقاعدة التي خرقتها. الحل. انقل الشيفرة، أو مرّر بيانات بسيطة من الوحدة الأعلى. انظر الوحدات.

العَرَض. لا تبدأ الاختبارات الشاملة. السبب. متصفح الاختبار غير مثبّت. الحل. شغّل سطر playwright install المذكور أعلاه.

العَرَض. تفشل اختبارات Go لغياب صفحات. السبب. تطبيق الويب غير مبني. الحل. شغّل npm --prefix app/frontend run build.

وسوم البناء

الاختبار الذي له وسم يُتخطّى في go test ./... العادي. مرّر -tags <tag> لتشغيله.

الوسم يحوي
structure قواعد الطبقات وتنظيم الملفات وموضع SQL والتعليقات في tools/structurecheck
measure فحوص توقيت التنزيل
lab اختبارات أمام تطبيقات حقيقية في مختبر اختبار. تقرأ HOLYARRS_LAB_* وتُتخطّى إذا لم تكن مضبوطة
labms, livesubs تشغيلات المختبر لخوادم الوسائط ومواقع الترجمات الحية
التشغيلات الطويلة وتشغيلات الأعطال

يشغّل CI هذه فوق الاختبارات العادية. شغّلها قبل نشر أي إصدار من التطبيق.

Terminal window
go test -count=1 -run '^TestFault|^TestCrashInEveryLoopIsContained$' ./app/backend/cmd/holyarrs
HOLYARRS_RESTART_TIMING=1 go test -count=1 -run '^TestCrashRestartTime$' ./app/backend/cmd/holyarrs
HOLYARRS_MEMORY=1 go test -count=1 -timeout 30m -run '^TestMemoryPartsRuns$' ./app/backend/cmd/holyarrs
go test -count=1 -run '^TestDownloaderConformance$' ./app/backend/internal/downloads
المتغير عمله
HOLYARRS_FAULT_OUT الملف الذي تكتب فيه تشغيلات الأعطال جدولها
HOLYARRS_RESTART_TIMING, HOLYARRS_RESTART_TIMING_OUT يفعّلان قياس الوقت من العطل إلى تسجيل الدخول ويسمّيان ملف ناتجه
HOLYARRS_MEMORY, HOLYARRS_MEMORY_OUT يفعّلان تشغيلات الذاكرة ويسمّيان ملف ناتجها
HOLYARRS_CRASH_RUNS, HOLYARRS_CRASH_SEED عدد الجولات والبذرة لحلقة الأعطال في app/backend/internal/mediafiles/dbtests (crash_test.go)، وهي تُتخطّى مع -short
الخوادم البديلة والمتغيرات

تشغّل الاختبارات الشاملة خوادم بديلة لبرامج التنزيل والمصادر وخادم البيانات الوصفية، فلا يصل أي اختبار إلى خدمة حقيقية. تضبط الاختبارات متغيرات مثل HOLYARRS_TMDB_URL وHOLYARRS_MUSICBRAINZ_URL وHOLYARRS_PLEX_URL وHOLYARRS_QBITTORRENT_URL لتوجّه البرنامج إليها. التثبيت الحقيقي لا يحتاج إليها أبدًا.

لعقد API اختباراته الخاصة. يفشل TestOpenAPIGenerated إذا انحرف openapi.json عن المسارات، وتفشل لقطة جدول المسارات في tools/structurecheck/testdata عند أي مسار أُضيف أو أُزيل أو نُقل.

HolyArrs مجاني. إذا وفّر عليك وقتًا، امنحه نجمة على GitHub أو ادعمه ماليًا أو ادعُني إلى فنجان قهوة.