Skip to main content

title: الاختبار description: “اختبارات الوحدة واختبارات End-to-End ومساعدات الاختبار” icon: flask-vial

failproofai يحتوي على مجموعتي اختبار: اختبارات الوحدة (سريعة، معزولة) واختبارات End-to-End (استدعاءات subprocess حقيقية).

تشغيل الاختبارات


اختبارات الوحدة

اختبارات الوحدة توجد في __tests__/ وتستخدم Vitest مع jsdom.

كتابة اختبار وحدة للسياسة


اختبارات End-to-End

اختبارات E2E تستدعي ملف التنفيذ failproofai الحقيقي كـ subprocess، وتنقل حمولة JSON إلى stdin، وتتحقق من مخرجات stdout ورمز الخروج. هذا يختبر مسار التكامل الكامل الذي يستخدمه Claude Code.

الإعداد

اختبارات E2E تشغل الملف التنفيذي مباشرة من مصدر المستودع. قبل التشغيل الأول، بناء حزمة CJS التي تستخدمها ملفات hook المخصصة عند الاستيراد من 'failproofai':
ثم قم بتشغيل الاختبارات:
أعد بناء dist/ كلما غيرت واجهة برمجية hook عامة (src/hooks/custom-hooks-registry.ts أو src/hooks/policy-helpers.ts أو src/hooks/policy-types.ts).

هيكل اختبار E2E

استخدام مساعدات E2E

FixtureEnv - بيئة معزولة لكل اختبار:
createFixtureEnv() يسجل تنظيف afterEach تلقائيًا. runHook - استدعاء الملف التنفيذي:
Payloads - مصانع الحمولة الجاهزة:

كتابة اختبار E2E

أشكال استجابات E2E

إعداد Vitest

اختبارات E2E تستخدم vitest.config.e2e.mts مع:
  • environment: "node" - لا توجد متغيرات عامة للمتصفح مطلوبة
  • pool: "forks" - عزل العملية الحقيقي (الاختبارات تستدعي subprocesses)
  • testTimeout: 20_000 - 20 ثانية لكل اختبار (بدء التشغيل + تقييم hook)
حوض forks مهم: العمال المستندة إلى الخيوط تشارك globalThis، مما قد يتداخل مع الاختبارات التي تستدعي subprocess. العمليات المستقلة تتجنب هذا.

CI

يجب أن يمر التشغيل الكامل لـ CI (bun run lint && bunx tsc --noEmit && bun run test:run && bun run build) قبل دمج الكود. مجموعة E2E تعمل كعمل CI منفصل بالتوازي. انظر المساهمة لقائمة التحقق الكاملة قبل الدمج.