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

يتضمّن واجهة سطر الأوامر في Firebase محاكي Cloud Functions الذي يمكنه محاكاة أنواع الدوال التالية:

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

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

تثبيت واجهة برمجة التطبيقات Firebase CLI

لاستخدام المحاكي Cloud Functions، يجب أولاً تثبيت واجهة سطر الأوامر في Firebase من خلال اتّباع الخطوات التالية:

npm install -g firebase-tools

لاستخدام المحاكي المحلي، يجب أن يعتمد Cloud Functions على:

  • firebase-admin الإصدار 8.0.0 أو أحدث.
  • firebase-functions بالإصدار 3.0.0 أو إصدار أحدث

إعداد بيانات اعتماد المشرف (اختياري)

إذا كنت تريد تفاعل اختبارات الدوال مع Google APIs أو منصة Firebase الأخرى واجهات برمجة التطبيقات عبر SDK لمشرف Firebase، قد تحتاج إلى إعداد بيانات اعتماد المشرف.

  • تتوفّر لدى مشغّلَي التفعيل Cloud Firestore وRealtime Database بيانات اعتماد كافية، ولا يتطلّبان إعدادًا إضافيًا.
  • أما جميع واجهات برمجة التطبيقات الأخرى، بما في ذلك واجهات برمجة تطبيقات Firebase، مثل Authentication وFCM، أو Google APIs، مثل Cloud Translation أو Cloud Speech، فتتطلب خطوات الإعداد الموضّحة في هذا القسم. ينطبق ذلك سواء كنت تستخدم Cloud Functions shell أو 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 APIs باستخدام حزمة تطوير البرامج (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+KTX
// 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().useFunctionsEmulator(origin: "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

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

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

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

خصِّص تطبيقك لمحاكاة الدوال التي يتم تشغيلها في الخلفية.

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

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

لبدء أحداث في الخلفية، عليك تعديل موارد الواجهة الخلفية باستخدام Emulator Suite UI، أو من خلال ربط تطبيقك أو اختبار الرمز بالمحاكيات باستخدام SDK لنظامك الأساسي.

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

للدوال التي تنفّذها للتعامل مع Firebase Extensions أحداث مخصّصة في الإصدار 2 من Cloud Functions، سيتم إقران محاكي "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 لتشغيل أي معالجات مسجَّلة.

يمكنك الاطّلاع على سجلّات 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، سيتم إرسال عمليات الكتابة هذه إلى محاكي المصادقة. إذا كان قيد التشغيل. إذا تم تشغيل المزيد من الدوال بواسطة تلك الكتابة، سيتم تشغيلها في محاكي Cloud Functions.

استضافة Firebase

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

تنبيهات Firebase

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

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

التسجيل

ويبث المحاكي السجلات من الدوال إلى النافذة الطرفية، حيث الجري. وهي تعرض جميع النتائج من console.log() وconsole.info() وconsole.error() وconsole.warn() في الدوال.

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

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