الإجابة المختصرة

لا تحتاج إلى إضافة ملف سير عمل، ولا إلى كتابة نص برمجي يستخرج رابط المعاينة من سجلات البناء. يُثبَّت TestSprite كتطبيق GitHub، ويستمع لحدث النشر الذي ينتجه خط الأنابيب لديك بالفعل، ويستنتج رابط المعاينة من نمط تحدده مرة واحدة، ويشغّل اختباراتك عليه، وينشر النتيجة كتعليق على طلب السحب.

يستغرق الإعداد نحو عشر دقائق، ويتطلب صلاحيات المسؤول لتثبيت تطبيق GitHub، ولا يتطلب أي تغييرات على مستودعك.

خط الأنابيب لديك ينشر

يبني Vercel طلب السحب وينتج حدث نشر في GitHub. لا يقوم TestSprite ببناء أو نشر أي شيء بنفسه.

TestSprite يستمع للحدث

يستقبل تطبيق GitHub الحدث، ويحلّل رابط الهدف من النمط الذي حددته، ويبدأ التشغيل.

تصل النتائج إلى طلب السحب

تعليق يتضمن أعداد النجاح/الفشل، والخطوات الفاشلة، ولقطات الشاشة، وموجّه إصلاح (fix prompt) — بالإضافة إلى فحص إلزامي اختياري يمنع الدمج.

شرط مسبق: تأكد من أن طلب السحب ينتج نشرًا

يُشغَّل TestSprite بواسطة حدث نشر، لذا يجب أن يكون هذا الحدث موجودًا قبل أن يعمل أي شيء آخر. افتح أي طلب سحب موجود وتأكد من ظهور نشر برابط قابل للنقر، ثم افتح ذلك الرابط وتحقق من أن بيئة المعاينة تُحمَّل بالفعل.

في Vercel، يظهر هذا كتعليق من بوت على طلب السحب يسرد المشروع، وحالة Ready، ورابطًا للمعاينة. تُنتج AWS Amplify وNetlify وخطوط الأنابيب المستضافة ذاتيًا التي تُنشئ نشرات GitHub نفس الإشارة بتنسيقها الخاص — المهم هو أن يكون النشر موجودًا وأن يكون رابطه قابلاً للوصول.

إذا لم يظهر أي نشر على طلب السحب الخاص بك، فتوقف هنا وأصلح خط أنابيب CI/CD أولًا. ليس لدى TestSprite ما يستمع إليه إلى أن يوجد حدث نشر.

الخطوة 1 — اربط GitHub بمساحة عملك

هذا إعداد يتم مرة واحدة لكل مساحة عمل. في TestSprite، انتقل إلى Workspace Settings → Integrations، وابحث عن صف GitHub، وانقر على Connect. ستتم إعادة توجيهك إلى GitHub لاختيار المؤسسة أو الحساب الشخصي المالك للمستودع، ثم اختر All repositories أو Only select repositories وانقر على Install & Authorize.

من المفيد معرفة الأذونات المطلوبة قبل الموافقة عليها:

الوصولالنطاقات
قراءةالإجراءات (Actions)، والفحوصات (checks)، والمشكلات (issues)، والبيانات الوصفية
قراءة وكتابةالشيفرة (Code)، وحالات الالتزام (commit statuses)، والنشرات (deployments)، وطلبات السحب (pull requests)

يُستخدم إذن الكتابة لنشر نتائج الاختبار على طلبات السحب والالتزامات الخاصة بك. لا يقوم TestSprite بدفع التزامات (commits) أو تعديل ملفات سير العمل لديك. إذا لم تظهر مؤسستك أثناء التثبيت، فأنت لا تملك إذن تثبيت تطبيقات GitHub لها — يحتاج مالك المؤسسة إلى الموافقة عليه.

الخطوة 2 — اربط المستودع بمشروع

افتح مشروع TestSprite الذي تريد ربطه، وانتقل إلى تبويب GitHub Action، وانقر على Connect GitHub Action. ثم اختر الطريقة التي ستُشغَّل بها الاختبارات:

المُشغِّلالأنسب لـأين تظهر النتائج
طلب السحباكتشاف الانحدارات قبل الدمجتعليق على طلب السحب
الدفع إلى فرعاختبار بيئة مشتركة مثل staging أو dev بعد كل عملية دمجفحص على الالتزام (commit)

يكفي مُشغِّل واحد للبدء. يمكنك إنشاء كليهما — إذ يعملان بشكل مستقل عن بعضهما.

الخطوة 3 — اختر الحدث الذي يعني "اكتمال النشر"

اختر تبويب Pull Request، والصق رابط طلب سحب موجود لديه نشرة معاينة تعمل، وانقر على Detect Events. يسرد TestSprite أحداث CI/CD التي وجدها على ذلك الطلب — فحوصات GitHub Actions، وتعليقات البوت من Vercel أو Amplify، وتشغيلات سير العمل — وتختار أنت أيها يبدأ التشغيل.

اختر الحدث الذي يُطلَق بعد أن يصبح النشر فعليًا ويكون الرابط قابلاً للوصول. هذا هو الخطأ الأكثر شيوعًا في الإعداد: فالحدث الذي يُطلَق عند بدء البناء سيشغّل اختباراتك على رابط لم يصبح متاحًا بعد، وستفشل كل الاختبارات.

الخطوة 4 — أدخل نمط رابط الهدف

يُسمّي كل مزود استضافة روابط المعاينة بطريقة مختلفة، لذا تُخبر TestSprite بكيفية بناء الرابط لأي طلب سحب معيّن. تتوفر خمسة عناصر نائبة (placeholders):

العنصر النائبيُحلّ إلى
{pr}رقم طلب السحب
{branch}اسم الفرع
{branch-slug}اسم الفرع، بصيغة آمنة للرابط
{sha}قيمة SHA الكاملة للالتزام
{short-sha}قيمة SHA المختصرة للالتزام

طابق النمط مع رابط معاينة حقيقي، حرفًا بحرف:

روابط المعاينة لديك تبدو كالتاليأدخل هذا النمط
https://app-git-login-fix-team.vercel.apphttps://app-git-{branch-slug}-team.vercel.app
https://pr-123.example.comhttps://pr-{pr}.example.com

تُبنى أسماء مضيفي المعاينة الافتراضية في Vercel من اسم الفرع، ولهذا يكون {branch-slug} عادة العنصر النائب الصحيح هناك بدلًا من {pr}. إذا كان مضيفك يُنشئ نطاقات فرعية عشوائية لا يمكن التنبؤ بها، فاضبط رابط اسم مستعار (alias) ثابتًا لبيئة المعاينة واستخدمه بدلًا من ذلك.

لا يحتاج مُشغِّل الدفع (push trigger) إلى أي نمط على الإطلاق — فهو يعمل على الرابط المضبوط لأي بيئة TestSprite تحددها، لذا اختر Dev لـ dev أو Production لـ main.

الخطوة 5 — أرسل حدث اختبار قبل الحفظ

انقر على Send Test Event. يشغّل هذا اختباراتك على طلب السحب النموذجي تمامًا كما يفعل المُشغِّل الحقيقي، بحيث يمكنك معاينة سير العمل بأكمله قبل الالتزام به. انتظر نحو 30 ثانية، ثم عد إلى طلب السحب على GitHub — سيظهر تعليق من TestSprite.

افتح الرابط الموجود في ذلك التعليق قبل المتابعة. تأكد من أنه قابل للوصول ويشير إلى البيئة التي تتوقعها. إذا كان خاطئًا، فصحّح النمط وأرسل حدث اختبار آخر بدلًا من الانتظار حتى طلب السحب التالي لاكتشاف ذلك. بمجرد اكتمال التشغيل، يُحدّث TestSprite التعليق نفسه بالنتيجة.

عندما يبدو حدث الاختبار صحيحًا، انقر على Create Trigger. سيظهر في قائمة Triggers بعلامة Active، ويعمل تلقائيًا على كل طلب سحب مستقبلي. هناك مفتاحان اختياريان يستحقان الضبط بعناية:

المفتاحما الذي يفعله
Include draft PRsيشغّل الاختبارات على طلبات السحب المسودة (draft) وكذلك تلك الجاهزة للمراجعة
Block PR until tests passيجعل فحص TestSprite إلزاميًا، بحيث يُمنع الدمج أثناء فشل الاختبارات

إذا كانت معاينتك تقع خلف Deployment Protection

هذا هو نمط الفشل الذي يبدو وكأنه إعداد ناجح. عند تفعيل Deployment Protection في Vercel، يقع كل رابط معاينة خلف جدار مصادقة، ويتلقى المُختبِر الخارجي صفحة تسجيل الدخول بدلًا من تطبيقك. لا تُخفق الاختبارات — بل تصف صفحة لم يتوقعها أحد.

يكتشف الفحص في الخطوة 5 ذلك: افتح الرابط من تعليق TestSprite في نافذة خاصة. إذا رأيت شاشة تسجيل دخول Vercel، فالحماية مفعّلة. الطريقتان للمضي قدمًا هما تعطيل الحماية عن بيئة المعاينة، أو استخدام Protection Bypass for Automation من Vercel، الذي يُنشئ سرًا تقبله Vercel كمعامل استعلام x-vercel-protection-bypass وكذلك كترويسة (header). ولأن نمط رابط الهدف هو مجرد رابط، يمكن إلحاق صيغة معامل الاستعلام به:

https://app-git-{branch-slug}-team.vercel.app?x-vercel-protection-bypass=YOUR_SECRET

أنشئ السر ضمن Project Settings → Deployment Protection → Protection Bypass for Automation. كن حذرًا بشأن هذا الخيار — فهو يخزّن سر تجاوز في حقل إعدادات، لذا يكون تعطيل الحماية عن بيئات المعاينة الخيار الأنظف عندما لا تحتوي معايناتك على أي شيء حساس.

قراءة النتيجة

عند اكتمال التشغيل، يُحدّث TestSprite تعليق طلب السحب — أو فحص الالتزام — بالنتيجة. التعليق منظّم، والصف الأخير هو الأهم إذا كان وكيل ذكاء اصطناعي هو من كتب الشيفرة:

القسمما الذي يخبرك به
النتيجة الإجماليةعدد الاختبارات التي نجحت وفشلت وحُظرت
درجة الجودةتُحسب على المجموعة الجزئية القابلة للتنفيذ من مجموعتك. تُستبعد الحالات المحظورة ويُبلَّغ عنها بشكل منفصل، لأنها عادة ما تشير إلى فجوة في بيئة الاختبار وليس انحدارًا في المنتج
الاختبارات الفاشلةيتوسع كل فشل ليُظهر ما كان متوقعًا، وما لوحظ فعليًا، ولقطة شاشة من لحظة الفشل
موجّه الإصلاح المقترحموجّه جاهز للنسخ يصف السبب الجذري المحتمل والإصلاح، مُعَدّ للصقه مباشرة في وكيل الترميز بالذكاء الاصطناعي الخاص بك

ترتبط كل نتيجة بالتقرير الكامل في TestSprite.

تحقق من إعدادك

قبل الاعتماد على هذا التكامل، تأكد من النقاط الخمس التالية:

  1. يظهر تكامل GitHub كـConnected في مساحة عملك

  2. يظهر المستودع داخل تبويب GitHub Action الخاص بالمشروع

  3. يوجد مُشغِّل مُدرَج ومُفعَّل

  4. أنتج حدث اختبار تعليقًا من TestSprite (طلب سحب) أو فحصًا (دفع)

  5. يفتح الرابط في ذلك التعليق أو الفحص البيئة المنشورة الصحيحة

استكشاف الأخطاء وإصلاحها

تفشل كل الاختبارات ولا يُحمَّل الرابط

يُطلَق المُشغِّل مبكرًا جدًا — عند حدث بدء البناء أو بدء سير العمل بدلًا من حدث اكتمال النشر. عدّل المُشغِّل واختر حدثًا يُطلَق بعد أن تصبح البيئة فعالة.

يعرض التعليق رابطًا خاطئًا

تحقق من نمط الرابط مقابل رابط معاينة حقيقي حرفًا بحرف. أرسل حدث اختبار آخر بعد كل تغيير بدلًا من الانتظار حتى طلب السحب التالي.

لا تظهر أي أحداث عند Detect Events

لا يحتوي طلب السحب أو الفرع على أي أحداث CI/CD مسجلة، أو لا يملك تطبيق GitHub وصولًا إلى ذلك المستودع. تأكد من أن المستودع مُدرَج ضمن تثبيت التطبيق.

تعمل الاختبارات على بيئة قديمة

تأكد من أن الحدث المحدد يقابل النشر الذي تنوي اختباره. إذا كان للفرع عدة بيئات، تحقق من أن اختيار Environment to test مطابق.

المؤسسة غير مُدرَجة

لا تملك إذن تثبيت تطبيقات GitHub لها. اطلب من مالك المؤسسة الموافقة على التثبيت، ثم عد إلى الخطوة 1.

تنجح الاختبارات لكن التطبيق معطّل

تحقق مما قدّمه رابط المعاينة فعليًا. تُعيد المعاينة المحمية صفحة تسجيل دخول يمكن للاختبار وصفها دون أن يفشل.

البديل عبر سطر الأوامر

تطبيق GitHub هو الحل الصحيح عندما ينتج خط الأنابيب لديك نشرات بالفعل. إذا كنت تفضّل تشغيل الاختبار من سير عملك الخاص — أو لست على GitHub أصلًا — فإن أداة سطر الأوامر مفتوحة المصدر TestSprite CLI تؤدي المهمة نفسها من أي نظام CI. وهي مجانية التثبيت ومرخّصة بموجب Apache-2.0:

npm install -g @testsprite/testsprite-cli
testsprite setup

وجّه مشروعًا إلى رابط قمت بحله بالفعل، وشغّل المجموعة للوصول إلى نتيجة:

testsprite project update prj_abc123 --url "$PREVIEW_URL"
testsprite test run --all --project prj_abc123 --wait --output json
#   exit 0 = everything passed, exit 1 = something is broken

testsprite ci init github ينشئ هيكل سير عمل لهذا المسار، ولا تحتاج أداة سطر الأوامر إلا إلى TESTSPRITE_API_KEY في البيئة، لذا يمكن إدراجها بنفس السهولة في CircleCI أو GitLab أو Jenkins أو Azure Pipelines. استخدم --report junit --report-file <path> للحصول على تقرير جانبي تستوعبه هذه الأنظمة بشكل أصلي.

إذا كانت التدفقات التي تهمك تقع خلف تسجيل الدخول الخاص بتطبيقك، فخزّن حساب اختبار على المشروع حتى تتمكن عمليات التشغيل من المصادقة. كلا العلامتين (flags) مطلوبتان معًا:

testsprite project update prj_abc123 \
  --username qa@example.com \
  --password-file ./.secrets/qa-password

الأسئلة الشائعة

هل أحتاج إلى إضافة ملف سير عمل إلى مستودعي؟

لا. يُضبط التكامل بالكامل داخل TestSprite، ولا تحتاج إلى أي تغييرات على مستودعك.

هل يحل هذا محل سير عمل GitHub Actions الحالي لدي؟

لا. يستمع TestSprite للأحداث التي ينتجها سير عملك بالفعل — فهو لا يعدّل خط الأنابيب لديك أو يستبدله.

ما مزودو الاستضافة المدعومون؟

أي مزود يُبلغ عن نشر إلى GitHub ويوفر رابطًا قابلاً للوصول، بما في ذلك Vercel وAWS Amplify وNetlify وخطوط الأنابيب المستضافة ذاتيًا التي تُنشئ نشرات GitHub.

هل يمكنني الحصول على مُشغِّل لطلب السحب ومُشغِّل للدفع معًا؟

نعم. أنشئهما بشكل منفصل — فهما يعملان بشكل مستقل عن بعضهما.

ماذا لو كانت روابط المعاينة لدي لا تتضمن رقم طلب السحب؟

يتوقع حقل نمط الرابط نمطًا يمكن التنبؤ به. تُبنى أسماء المضيف الافتراضية في Vercel من الفرع، لذا يكون {branch-slug} عادة العنصر النائب الصحيح. إذا كان مضيفك يُنشئ نطاقات فرعية عشوائية، فاضبط رابط اسم مستعار ثابتًا لبيئة المعاينة واستخدمه بدلًا من ذلك.

هل يمكن أن تغذي النتيجة وكيل الترميز بالذكاء الاصطناعي لدي مباشرة؟

نعم — هذا هو الغرض من قسم Suggested fix prompt في التعليق. إنه موجّه جاهز للنسخ يصف السبب الجذري المحتمل والإصلاح، مكتوب ليُلصَق في وكيل الترميز. للحصول على حلقة أكمل، يُثبّت testsprite setup --agent claude مهارة تحقق حتى يتمكن الوكيل من إنشاء الاختبارات وتشغيلها وفرزها بنفسه.

كم من الوقت يستغرق الإعداد؟

نحو عشر دقائق، وتحتاج إلى صلاحيات المسؤول لتثبيت تطبيق GitHub على المؤسسة المالكة للمستودع.

// الخلاصة

خط الأنابيب لديك يُصدر الإشارة بالفعل. استمع إليها.

اختبار نشرة معاينة لا يتطلب ملف سير عمل جديدًا، أو نصًا برمجيًا يستخرج سجلات البناء، أو إجراء طرف ثالث لانتظار رابط. خط الأنابيب لديك ينتج بالفعل حدث نشر؛ والمطلوب هو إخبار TestSprite بأي حدث يعني "مباشر" وكيفية بناء الرابط منه. عشر دقائق، دون أي تغييرات على المستودع، وكل طلب سحب يُفحص مقابل متصفح حقيقي قبل أن ينظر إليه أي إنسان. بالنسبة لمسار سطر الأوامر، اطّلع على المرجع في docs.testsprite.com وضع نجمة على أداة سطر الأوامر مفتوحة المصدر على GitHub.