تشغيل الدوال على الجهاز

تتضمّن Firebase CLI محاكي Cloud Functions يمكنه محاكاة أنواع الدوال التالية:

  • دوال HTTPS
  • الدوال القابلة للاستدعاء
  • دوال قائمة انتظار المهام
  • دوال الخلفية التي يتم تشغيلها من Firebase Authentication وRealtime Database و Cloud Firestore وCloud Storage وتنبيهات Firebase المتوافقة و وCloud Pub/Sub

يمكنك تشغيل الدوال محليًا لاختبارها قبل نشرها في بيئة الإنتاج.

تثبيت Firebase CLI

.

لاستخدام محاكي Cloud Functions، عليك أولاً تثبيت Firebase CLI:

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 APIs مثل ترجمة Cloud أو Cloud Speech، خطوات الإعداد الموضّحة في هذا القسم. وينطبق ذلك سواء كنت تستخدم الـ Cloud Functions shell أو firebase emulators:start.

لإعداد بيانات اعتماد المشرف للدوال المحاكاة:

  1. افتح لوحة حسابات الخدمة في Google Cloud Console.
  2. تأكَّد من اختيار App Engine حساب الخدمة التلقائي ، واستخدِم قائمة الخيارات على يسار الشاشة لاختيار إنشاء مفتاح.
  3. عندما يُطلب منك ذلك، اختَر JSON لنوع المفتاح، وانقر على إنشاء.
  4. اضبط بيانات اعتماد 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 باستخدام 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 وقاعدة بيانات الوقت الفعلي واستضافة Firebase استنادًا إلى المنتجات التي أعددتها في مشروعك على جهاز المستخدم باستخدام firebase init. إذا كنت تريد بدء محاكي معيّن، استخدِم العلامة --only:

firebase emulators:start --only functions

إذا كنت تريد تشغيل مجموعة اختبارات أو نص برمجي للاختبار بعد بدء المحاكيات، استخدِم الأمر emulators:exec:

firebase emulators:exec "./my-test.sh"

بعد بدء التشغيل، يعرض المحاكي سجلّات من الدوال في النافذة الطرفية التي يتم تشغيله فيها. ويعرض جميع النتائج من عبارات console.log() وconsole.info() وconsole.error() وconsole.warn() داخل الدوال.

يُرجى العِلم أنّ ناتج المحاكي يحاكي نشر الدوال تلقائيًا في منطقة معيّنة (us-central1) قد لا تتطابق مع المنطقة التلقائية للنشر الفعلي في بيئة الإنتاج. راجع Cloud Functions مواقع لمزيد من المعلومات عن المناطق.

تجهيز تطبيقك للتواصل مع المحاكيات

لتجهيز تطبيقك للتفاعل مع المحاكيات، قد تحتاج إلى إجراء بعض الإعدادات الإضافية.

تجهيز تطبيقك للدوال القابلة للاستدعاء

إذا كان النموذج الأولي وأنشطة الاختبار يتضمّنان دوالاً قابلة للاستدعاء في الخلفية، اضبط التفاعل مع 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

تجهيز تطبيقك لمحاكاة دوال قائمة انتظار المهام

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

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

تجهيز تطبيقك لمحاكاة الدوال التي يتم تشغيلها في الخلفية

يتوافق محاكي Cloud Functions مع الدوال التي يتم تشغيلها في الخلفية من المصادر التالية:

  • محاكي Realtime Database
  • محاكي Cloud Firestore
  • محاكي "Authentication"
  • محاكي Pub/Sub
  • محاكي تنبيهات Firebase

لتشغيل أحداث الخلفية، عدِّل موارد الخلفية باستخدام Emulator Suite UI، أو من خلال ربط تطبيقك أو رمز الاختبار بالمحاكيات باستخدام حزمة تطوير البرامج (SDK) لمنصّتك.

اختبار معالِجات الأحداث المخصّصة التي تنشئها الإضافات

بالنسبة إلى الدوال التي تنفّذها لمعالجة الأحداث المخصّصة Firebase Extensions باستخدام Cloud Functions v2، يقترن محاكي Cloud Functions بمحاكي Eventarc لدعم مشغّلات Eventarc.

لاختبار معالِجات الأحداث المخصّصة للإضافات التي تنشئ الأحداث، يجب تثبيت محاكيات Cloud Functions وEventarc.

يضبط وقت تشغيل Cloud Functions متغيّر البيئة EVENTARC_EMULATOR على localhost:9299 في العملية الحالية إذا كان محاكي Eventarc قيد التشغيل. تتصل Firebase Admin SDKs تلقائيًا بمحاكي Eventarc عند ضبط متغيّر البيئة EVENTARC_EMULATOR. يمكنك تعديل المنفذ التلقائي كما هو موضّح في ضبط Local Emulator Suite.

عند ضبط متغيّرات البيئة بشكلٍ صحيح، ترسل Firebase Admin SDK تلقائيًا الأحداث إلى محاكي Eventarc. وبدوره، يعاود محاكي Eventarc الاتصال بمحاكي Cloud Functionsلتشغيل أي معالِجات مسجّلة.

يمكنك الاطّلاع على سجلّات الدوال في Emulator Suite UI للحصول على تفاصيل عن تنفيذ المعالِج.

التفاعلات مع الخدمات الأخرى

تتضمّن مجموعة أدوات المحاكاة محاكيات متعددة تتيح اختبار التفاعلات بين المنتجات.

Cloud Firestore

إذا كانت لديك دوال تستخدم Firebase Admin SDK للكتابة إلى Cloud Firestore، سيتم إرسال عمليات الكتابة هذه إلى محاكي Cloud Firestoreإذا كان قيد التشغيل. إذا تم تشغيل دوال أخرى بسبب عمليات الكتابة هذه، سيتم تشغيلها في محاكي Cloud Functions.

Cloud Storage

إذا كانت لديك دوال تستخدم Firebase Admin SDK (الإصدار 9.7.0 أو إصدار أحدث) للكتابة إلى Cloud Storage، سيتم إرسال عمليات الكتابة هذه إلى محاكي Cloud Storage إذا كان قيد التشغيل. إذا تم تشغيل دوال أخرى بسبب عمليات الكتابة هذه، سيتم تشغيلها في محاكي Cloud Functions.

Firebase Authentication

إذا كانت لديك دوال تستخدم مدير SDK في Firebase (الإصدار 9.3.0 أو إصدار أحدث) للكتابة إلى Firebase Authentication، سيتم إرسال عمليات الكتابة هذه إلى محاكي "المصادقة" إذا كان قيد التشغيل. إذا تم تشغيل دوال أخرى بسبب عمليات الكتابة هذه، سيتم تشغيلها في محاكي Cloud Functions.

استضافة Firebase:

إذا كنت تستخدم Cloud Functions لـ إنشاء محتوى ديناميكي لـ Firebase Hosting، firebase emulators:start يستخدِم دوال HTTP المحلية كوكلاء للاستضافة.

تنبيهات Firebase

في أي مشروع يتضمّن مشغّلاً واحدًا على الأقل من مشغّلات تنبيهات Firebase المتوافقة، تتضمّن واجهة مستخدم المحاكي علامة التبويب FireAlerts. لمحاكاة مشغّل تنبيه:

  1. افتح علامة التبويب FireAlerts. تعرض هذه العلامة قائمة منسدلة تتضمّن أنواع التنبيهات التي لها مشغّلات مرتبطة بها (على سبيل المثال، إذا كان لديك مشغّل onNewFatalIssuePublished، سيتم عرض crashlytics.newFatalIssue).
  2. اختَر نوع تنبيه. تتم تلقائيًا تعبئة النموذج بالقيم التلقائية، ويمكن تعديلها. يمكنك تعديل حقول الحدث (يتم استنتاج المعلومات الأخرى من حدث التنبيه أو تكون قيمًا وهمية أو يتم إنشاؤها عشوائيًا).
  3. انقر على إرسال تنبيه لإرسال تنبيه اصطناعي إلى محاكي الدوال، مع توفّر التسجيل في التنبيهات في Firebase Console (بالإضافة إلى السجلّات).

الخطوات التالية

للحصول على مثال كامل عن استخدام مجموعة أدوات المحاكاة في Firebase، راجِع الـ عيّنة البدء السريع للاختبار.