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

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

لإعداد بيانات اعتماد المشرف للوظائف المحاكية، اتّبِع الخطوات التالية:

  1. افتح لوحة حسابات الخدمة في وحدة تحكّم Google Cloud.
  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)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance;
// Connects to the Functions Emulator running on port 5001
functions.UseFunctionsEmulator("http://127.0.0.1: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 Admin للكتابة إلى Cloud Firestore، سيتم إرسال عمليات الكتابة هذه إلى محاكي Cloud Firestore إذا كان قيد التشغيل. إذا تم تشغيل دوال إضافية من خلال عمليات الكتابة هذه، سيتم تنفيذها في محاكي Cloud Functions.

Cloud Storage

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

Firebase Authentication

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

استضافة Firebase:

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

تنبيهات Firebase

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

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

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

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