برومت جاهز · Claude Code · Cursor · أي AI بيكتب كود

خلّي الـ AI يكتب الاختبارات قبل الكود — وتطبيقك ما بيوقع بعد الإطلاق

عملت تطبيقك بالـ AI بأسبوع، وأول ما نزّلته للناس وقف؟ المشكلة مش بالأداة. المشكلة بإشي واحد بتنساه قبل ما تكتب أول برومت: ما بتطلب منه يختبر شغله. هون البرومت اللي بستخدمه، وكيف تخلّيه قاعدة ثابتة بكل مشروع.

الخلاصة بدقيقة

المشكلة
الـ AI بيكتب كود «بيشتغل» على المثال اللي قدامه، وبيسلّمك بثقة. أول مستخدم حقيقي بيدخل بيانات ما توقعها… وبيوقع.
الحل
اقلب الترتيب: الاختبارات أول، بعدين الكود. وما في «خلصت» إلا لما تنجح الاختبارات كلها.
ليش بيشتغل
الاختبار بيحوّل طلبك الغامض لشرط واضح بينجح أو بيفشل. الـ AI ما بيقدر «يتفلسف» على اختبار أحمر.
الوقت
دقيقة زيادة بكل مهمة… بدل يوم debugging بعد الإطلاق.
1

ليش التطبيق بيوقع بعد الإطلاق

الكل بفكر المشكلة بالأداة. بغيّر الأداة… وبرجع يوقع بنفس الحفرة. السبب الحقيقي إنه الـ AI بيكتب الكود للسيناريو السعيد بس:

  • بيانات ما توقعها: حقل فاضي، رقم بدل نص، اسم فيه رموز… وأول مستخدم حقيقي بيجيب واحدة منها.
  • تعديل بيكسر شي قديم: بتطلب ميزة جديدة، فبيعدّل دالة بتستخدمها ثلاث شاشات تانية. ما حدا بيعرف إلا المستخدم.
  • «خلصت» بدون دليل: هو بيقول خلصت لأنه كتب الكود، مش لأنه شافه بيشتغل.
الاختبار (Test) هو كود صغير بيشغّل وظيفة من تطبيقك ببيانات معيّنة وبيتأكد إن النتيجة صح. لما يكون عندك اختبارات، أي تعديل بيكسر شي بيبيّن فوراً بالأحمر — قبل ما يوصل للناس.
الاختبارات أول… بعدين الكود

انسخه زي ما هو وحطّه بأول رسالة بالجلسة. بيشتغل مع Claude Code و Cursor و Codex وأي أداة بتكتب كود.

2

البرومت الكامل

النسخة العربية — اللي بستخدمها بشغلي:

قبل ما تكتب أي كود: اكتب لي اختبارات (tests) تغطي كل وظيفة طلبتها، واعرضها عليّ. بعد موافقتي اكتب الكود، وشغّل الاختبارات بنفسك، وما تقول "خلصت" إلا لما تنجح كلها. إذا فشل اختبار، صلّح الكود مش الاختبار، وخبّرني شو كان الغلط.

English version — نفس القاعدة، لو أداتك بتفهم الإنجليزي أحسن:

Before writing any code: write tests that cover every feature I asked for, and show them to me first. After I approve, write the code, run the tests yourself, and do not say "done" until all of them pass. If a test fails, fix the code, not the test, and tell me what was wrong.

ليش كل جملة فيه مهمة

الجملةشو بتمنع
«قبل ما تكتب أي كود»إنه يبلّش بالكود وينسى الاختبارات أو يكتبها شكلياً بالآخر
«اعرضها عليّ»اختبارات ما بتعكس اللي بدك إياه. هون بتصحّح الفهم قبل ما يصير كود
«شغّل الاختبارات بنفسك»«خلصت» النظرية. لازم يشوفها خضرا فعلاً
«صلّح الكود مش الاختبار»أسهل غشّ: يعدّل الاختبار عشان يمرّ. هاي الجملة بتسكّر الباب
«خبّرني شو كان الغلط»بتتعلّم وين بيغلط، وبتكتشف إذا الطلب الأصلي كان ناقص
3

خلّيه قاعدة ثابتة بكل مشروع

بدل ما تلصقه بكل جلسة، حطّه بملف القواعد تبع المشروع وبيتطبّق لحاله:

Claude Code — أضف لملف CLAUDE.md بجذر المشروع:

## Testing rule (non-negotiable) - Before implementing any feature or fix: write the tests first and show them to me. - Only after I approve the tests, implement the code. - Run the full test suite yourself before reporting. Never say "done" with a failing or skipped test. - If a test fails, fix the code, never weaken or delete the test. Explain the root cause in one line.

Cursor — نفس النص بملف .cursor/rules/testing.mdc أو بـ Rules من الإعدادات.

مشروع بدون أي اختبارات؟ أول طلب يكون: «جهّز بيئة الاختبار للمشروع (framework + أمر تشغيل واحد) واكتب اختبار واحد بسيط يمرّ». بعدها القاعدة بتشتغل على كل ميزة جديدة.
4

خلّي الاختبارات تشتغل لحالها بعد كل تعديل

بـ Claude Code في شي اسمه hooks: أوامر بتنفّذ تلقائياً بعد أي أداة. هاد الـ hook بيشغّل الاختبارات بعد كل تعديل ملف، ولو فشلت Claude بيعرف قبلك:

الملف .claude/settings.json بمجلد المشروع (بدّل أمر الاختبار حسب مشروعك):

{ "hooks": { "PostToolUse": [ { "matcher": "Edit|Write", "hooks": [ { "type": "command", "command": "npm test --silent" } ] } ] } }

مشروع Python؟ بدّل الأمر لـ pytest -q. مشروع Go؟ go test ./....

التوثيق الرسمي — Claude Code hooks
شو بيصير بعد ما تلصقه

الدورة الصح بتاخد خمس خطوات. لو شفت غيرها، في شي غلط.

5

شو تتوقع تشوف

01
بيكتب الاختبارات وبيعرضها
02
إنت بتوافق أو بتصحّح
03
بيكتب الكود
04
بيشغّل الاختبارات
05
أحمر؟ بيصلّح الكود وبيعيد

مثال طلب

«بدي صفحة تسجيل: إيميل وكلمة سر، ورسالة خطأ واضحة لو الإيميل مستخدم.» مع البرومت، أول رد بيكون اختبارات زي: إيميل صحيح بينشئ حساب · إيميل مكرر بيرجع الرسالة · كلمة سر قصيرة بتنرفض · حقل فاضي بينرفض. هون بتكتشف إنك نسيت تحدّد «كلمة سر قصيرة» قديش — قبل ما ينكتب سطر كود.

علامات إنه بيتحايل على القاعدة

  • قال «خلصت» وما ظهر أمر تشغيل الاختبارات ولا نتيجتها.
  • الاختبارات كلها مرّت من أول مرة بدون ولا تعديل (غالباً شكلية).
  • عدّل ملف الاختبار بعد ما فشل — اسأله فوراً: «ليش غيّرت الاختبار مش الكود؟»
6

أخطاء بتخرّب الطريقة

اختبارات شكلية
expect(true).toBe(true) بيمرّ دايماً وما بيحمي شي. كل اختبار لازم يشغّل وظيفة حقيقية ببيانات حقيقية.
تخطي وقت الاستعجال
«هالمرة بس بدون اختبارات» هي بالضبط المرة اللي بتوقع. القاعدة بتحميك لما تكون مستعجل.
اختبار كل شي من أول يوم
ما بدك ١٠٠٪ تغطية. ابدأ بالمسارات اللي لو وقعت بتخسر مستخدم: تسجيل، دفع، حفظ البيانات.
الموافقة بدون قراءة
خطوة «اعرضها عليّ» هي أهم دقيقة بالعملية. لو ما قرأت الاختبارات، رجّعت المشكلة للنقطة صفر.
7

أسئلة شائعة

أنا مش مبرمج، بقدر أستخدم الطريقة؟
نعم. إنت ما بتكتب الاختبارات، الـ AI بيكتبها. دورك إنك تقرأها كقائمة «شو لازم يصير» وتقول موافق أو ناقص كذا. لو ما فهمت اختبار، اطلب منه يشرحه بجملة.
بياخد وقت أطول؟
بكل مهمة دقيقة أو دقيقتين زيادة. بالمقابل بتوفّر ساعات الـ debugging بعد الإطلاق، وبتعرف فوراً لو تعديل جديد كسر شي قديم.
الاختبارات فشلت وهو عدّل الاختبار بدل الكود. شو أعمل؟
ارجع للسطر الأخير من البرومت وذكّره: «صلّح الكود مش الاختبار». وإذا الاختبار فعلاً كان غلط، خلّيه يشرح ليش قبل ما توافق على تعديله.
بيشتغل مع ChatGPT أو Gemini بالشات العادي؟
القاعدة نفسها بتشتغل، بس بالشات العادي هو ما بيقدر يشغّل الاختبارات بنفسه. الأفضل أداة بتنفّذ الكود فعلاً: Claude Code أو Cursor أو Codex.
✓ تم النسخ