تتضمّن واجهة سطر الأوامر (CLI) في Firebase Cloud Functions محاكيًا يمكنه محاكاة أنواع الدوال التالية:
- وظائف HTTPS
- الدوال القابلة للاستدعاء
- وظائف قائمة انتظار المهام
- يمكن تشغيل الوظائف في الخلفية من Firebase Authentication وRealtime Database وCloud Firestore وCloud Storage وتنبيهات Firebase المتوافقة وCloud Pub/Sub.
يمكنك تشغيل الدوال محليًا لاختبارها قبل نشرها في الإصدار العلني.
تثبيت Firebase CLI
لاستخدام محاكي Cloud Functions، عليك أولاً تثبيت واجهة سطر الأوامر (CLI) في Firebase:
npm install -g firebase-tools
لاستخدام المحاكي المحلي، يجب أن يعتمد Cloud Functions على ما يلي:
- الإصدار
8.0.0
أو إصدار أحدث منfirebase-admin
- الإصدار
3.0.0
أو إصدار أحدث منfirebase-functions
إعداد بيانات اعتماد المشرف (اختياري)
إذا كنت تريد أن تتفاعل اختبارات الدوال مع واجهات برمجة التطبيقات من Google أو واجهات برمجة التطبيقات الأخرى من Firebase من خلال Firebase Admin SDK، قد تحتاج إلى إعداد بيانات اعتماد المشرف.
- تتوفّر بيانات اعتماد كافية لمشغّلي Cloud Firestore وRealtime Database، ولا تتطلّب إعدادًا إضافيًا.
- تتطلّب جميع واجهات برمجة التطبيقات الأخرى، بما في ذلك واجهات برمجة تطبيقات Firebase، مثل Authentication وFCM، أو واجهات برمجة تطبيقات Google، مثل Cloud Translation أو Cloud Speech، خطوات الإعداد الموضّحة في هذا القسم. ينطبق ذلك سواء كنت تستخدم واجهة Cloud Functions أو
firebase emulators:start
.
لإعداد بيانات اعتماد المشرف للوظائف المحاكية، اتّبِع الخطوات التالية:
- افتح لوحة "حسابات الخدمة" في وحدة تحكّم Google Cloud.
- تأكَّد من اختيار App Engine حساب الخدمة التلقائي، واستخدِم قائمة الخيارات على اليسار لاختيار إنشاء مفتاح.
- عندما يُطلب منك ذلك، اختَر JSON لنوع المفتاح، ثم انقر على إنشاء.
اضبط بيانات الاعتماد التلقائية في Google لتشير إلى المفتاح الذي تم تنزيله:
نظام التشغيل Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase emulators:start
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase emulators:start
بعد إكمال هذه الخطوات، يمكن أن تصل اختبارات الدوال إلى Firebase وواجهات Google API باستخدام Admin SDK. على سبيل المثال، عند اختبار مشغّل Authentication، يمكن للدالة المحاكية استدعاء admin.auth().getUserByEmail(email)
.
إعداد ضبط الدوال (اختياري)
إذا كنت تستخدم متغيرات إعداد الدوال المخصّصة، شغِّل أولاً الأمر التالي للحصول على الإعدادات المخصّصة (يجب تشغيل هذا الأمر في الدليل functions
) في بيئتك المحلية:
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
تشغيل حزمة المحاكي
لتشغيل محاكي Cloud Functions، استخدِم الأمر emulators:start
:
firebase emulators:start
سيبدأ الأمر emulators:start
المحاكيات الخاصة بـ Cloud Functions وCloud Firestore وRealtime Database وFirebase Hosting استنادًا إلى المنتجات التي أعددتها في مشروعك المحلي باستخدام firebase
init
. إذا أردت بدء محاكي معيّن، استخدِم العلامة --only
:
firebase emulators:start --only functions
إذا أردت تشغيل مجموعة اختبارات أو نص برمجي للاختبار بعد بدء المحاكيات، استخدِم الأمر emulators:exec
:
firebase emulators:exec "./my-test.sh"
تجهيز تطبيقك للتواصل مع المحاكيات
لتجهيز تطبيقك للتفاعل مع المحاكيات، قد تحتاج إلى إجراء بعض عمليات الإعداد الإضافية.
إعداد تطبيقك للدوال القابلة للاستدعاء
إذا كانت أنشطة النموذج الأولي والاختبار تتضمّن وظائف خلفية قابلة للاستدعاء، يمكنك ضبط التفاعل مع محاكي Cloud Functions for Firebase على النحو التالي:
Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val functions = Firebase.functions functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFunctions functions = FirebaseFunctions.getInstance(); functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useEmulator(withHost: "localhost", port: 5001)
Web
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "127.0.0.1", 5001);
Web
firebase.functions().useEmulator("127.0.0.1", 5001);
تجهيز تطبيقك لمحاكاة وظائف HTTPS
سيتم عرض كل دالة HTTPS في الرمز من المحاكي المحلي باستخدام تنسيق عنوان URL التالي:
http://$HOST:$PORT/$PROJECT/$REGION/$NAME
على سبيل المثال، سيتم عرض دالة helloWorld
بسيطة مع منفذ المضيف والمنطقة التلقائيين على العنوان التالي:
https://localhost:5001/$PROJECT/us-central1/helloWorld
إعداد تطبيقك لمحاكاة وظائف قائمة انتظار المهام
يُعدّ المحاكي تلقائيًا قوائم انتظار المهام المحاكية استنادًا إلى تعريفات المشغّلات، وتعيد حزمة تطوير البرامج (SDK) للمشرف توجيه الطلبات المدرَجة في قائمة الانتظار إلى المحاكي إذا رصدت أنّه يتم تشغيلها من خلال متغيّر البيئة CLOUD_TASKS_EMULATOR_HOST
.
يُرجى العِلم أنّ نظام الإرسال المستخدَم في الإصدار العلني أكثر تعقيدًا من النظام المستخدَم في المحاكي، لذا يجب عدم توقّع أن يتطابق السلوك المحاكى تمامًا مع بيئات الإصدار العلني. توفّر المَعلمات ضِمن المحاكي حدودًا عليا لمعدّل إرسال المهام وإعادة محاولة تنفيذها.
إعداد تطبيقك لمحاكاة الدوال التي يتم تشغيلها في الخلفية
يتيح محاكي Cloud Functions استخدام الدوال التي يتم تشغيلها في الخلفية من المصادر التالية:
- Realtime Database محاكي
- Cloud Firestore محاكي
- Authentication محاكي
- Pub/Sub محاكي
- محاكي تنبيهات Firebase
لتفعيل أحداث الخلفية، عدِّل موارد الخلفية باستخدام Emulator Suite UI، أو اربط تطبيقك أو رمز الاختبار بالمحاكيات باستخدام حزمة تطوير البرامج (SDK) الخاصة بمنصتك.
اختبار معالجات الأحداث المخصّصة التي تنبعث من الإضافات
بالنسبة إلى الدوال التي تنفّذها للتعامل مع أحداث Firebase Extensions مخصّصة باستخدام Cloud Functions الإصدار 2، يتم إقران محاكي Cloud Functions بمحاكي Eventarc لتوفير مشغّلات Eventarc.
لاختبار معالجات الأحداث المخصّصة للإضافات التي تُصدر أحداثًا، يجب تثبيت محاكيَي Cloud Functions وEventarc.
يضبط وقت تشغيل Cloud Functions متغير بيئة EVENTARC_EMULATOR
على localhost:9299
في العملية الحالية إذا كان المحاكي Eventarc قيد التشغيل. يتم ربط Firebase Admin SDK تلقائيًا بمحاكي Eventarc عند ضبط متغير البيئة EVENTARC_EMULATOR
. يمكنك تعديل المنفذ التلقائي كما هو موضّح في قسم ضبط Local Emulator Suite.
عند ضبط متغيرات البيئة بشكلٍ صحيح، يرسل Firebase Admin SDK الأحداث تلقائيًا إلى المحاكي Eventarc. في المقابل، يرسل محاكي Eventarc طلبًا إلى محاكي Cloud Functions لتفعيل أي معالِجات مسجّلة.
يمكنك الاطّلاع على سجلّات الدوال في Emulator Suite UI للحصول على تفاصيل حول تنفيذ المعالج.
التفاعلات مع الخدمات الأخرى
تتضمّن حزمة المحاكي عدّة محاكيات تتيح اختبار التفاعلات بين المنتجات.
Cloud Firestore
إذا كانت لديك دوال تستخدم حزمة تطوير البرامج (SDK) للمشرف في Firebase للكتابة إلى Cloud Firestore، سيتم إرسال عمليات الكتابة هذه إلى محاكي Cloud Firestore إذا كان قيد التشغيل. إذا تم تشغيل دوال إضافية من خلال عمليات الكتابة هذه، سيتم تنفيذها في Cloud Functions المحاكي.
Cloud Storage
إذا كانت لديك دوال تستخدم حزمة تطوير البرامج (SDK) للمشرف في Firebase (الإصدار 9.7.0 أو إصدار أحدث) للكتابة إلى Cloud Storage، سيتم إرسال عمليات الكتابة هذه إلى محاكي Cloud Storage إذا كان قيد التشغيل. إذا تم تشغيل دوال إضافية من خلال عمليات الكتابة هذه، سيتم تنفيذها في Cloud Functions المحاكي.
Firebase Authentication
إذا كانت لديك دوال تستخدم حزمة تطوير البرامج (SDK) للمشرف في Firebase (الإصدار 9.3.0 أو إصدار أحدث) للكتابة إلى Firebase Authentication، سيتم إرسال عمليات الكتابة هذه إلى محاكي Auth إذا كان قيد التشغيل. إذا تم تشغيل دوال إضافية من خلال عمليات الكتابة هذه، سيتم تنفيذها في Cloud Functions المحاكي.
استضافة Firebase
إذا كنت تستخدم Cloud Functions من أجل إنشاء محتوى ديناميكي
Firebase Hosting، تستخدم firebase emulators:start
وظائف HTTP المحلية كخوادم وكيل للاستضافة.
تنبيهات Firebase
في أي مشروع يتضمّن مشغّلاً واحدًا على الأقل لتنبيهات Firebase المتوافقة، تتضمّن واجهة مستخدم المحاكي علامة التبويب FireAlerts. لمحاكاة تشغيل تنبيه:
- افتح علامة التبويب تنبيهات الحرائق. تعرِض علامة التبويب هذه قائمة منسدلة تتضمّن أنواع التنبيهات التي تتضمّن مشغّلات مرتبطة بها (على سبيل المثال، إذا كان لديك مشغّل onNewFatalIssuePublished، سيتم عرض crashlytics.newFatalIssue).
- اختَر نوع تنبيه. يتم ملء النموذج تلقائيًا بالقيم التلقائية التي يمكن تعديلها. يمكنك تعديل حقول الحدث (يتم استنتاج المعلومات الأخرى من حدث التنبيه أو استخدام قيم وهمية أو إنشاء قيم عشوائية).
- انقر على إرسال تنبيه لإرسال تنبيه اصطناعي إلى محاكي الدوال، مع توفّر التسجيل في التنبيهات في وحدة تحكّم Firebase (وكذلك في السجلات).
التسجيل
يبث المحاكي السجلّات من الدوال إلى نافذة الوحدة الطرفية التي يتم تشغيلها فيها. تعرض هذه الأداة جميع النتائج من عبارات console.log()
وconsole.info()
وconsole.error()
وconsole.warn()
داخل الدوال.
الخطوات التالية
للاطّلاع على مثال كامل حول استخدام "مجموعة أدوات محاكي Firebase"، راجِع نموذج البدء السريع للاختبار.