Catch up on highlights from Firebase at Google I/O 2023. Learn more

تشغيل الوظائف محليا

يشتمل Firebase CLI على محاكي Cloud Functions الذي يمكنه محاكاة أنواع الوظائف التالية:

  • وظائف HTTPS
  • وظائف قابلة للاستدعاء
  • تم تشغيل وظائف الخلفية من مصادقة Firebase و Realtime Database و Cloud Firestore والتخزين السحابي و Cloud Pub / Sub.

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

قم بتثبيت Firebase CLI

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

npm install -g firebase-tools

من أجل استخدام المحاكي المحلي ، يجب أن تعتمد وظائف السحابة الخاصة بك على:

  • إصدار firebase-admin 8.0.0 أو أعلى.
  • الإصدار 3.0.0 أو أعلى firebase-functions .

إعداد بيانات اعتماد المسؤول (اختياري)

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

  • تمتلك مشغلات Cloud Firestore و Realtime Database بالفعل بيانات اعتماد كافية ، ولا تتطلب إعدادًا إضافيًا.
  • تتطلب جميع واجهات برمجة التطبيقات الأخرى ، بما في ذلك واجهات Firebase API مثل المصادقة و FCM أو واجهات برمجة تطبيقات Google مثل Cloud Translation أو Cloud Speech ، خطوات الإعداد الموضحة في هذا القسم. ينطبق هذا سواء كنت تستخدم واجهة Cloud Functions أو firebase emulators:start .

لإعداد بيانات اعتماد المسؤول للوظائف التي تمت مضاهاتها:

  1. افتح جزء حسابات الخدمة في Google Cloud Console.
  2. تأكد من تحديد حساب خدمة App Engine الافتراضي ، واستخدم قائمة الخيارات الموجودة على اليمين لتحديد إنشاء مفتاح .
  3. عند المطالبة ، حدد JSON لنوع المفتاح ، وانقر فوق إنشاء .
  4. قم بتعيين بيانات اعتماد Google الافتراضية للإشارة إلى المفتاح الذي تم تنزيله:

    يونكس

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase emulators:start
    

    شبابيك

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

بعد إكمال هذه الخطوات ، يمكن لاختبارات الوظائف الوصول إلى Firebase و Google APIs باستخدام Admin SDK . على سبيل المثال ، عند اختبار مشغل المصادقة ، يمكن للوظيفة التي تمت مضاهاتها استدعاء 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 command:

firebase emulators:start

emulators:start في برامج محاكاة وظائف السحابة و Cloud Firestore و Realtime Database و Firebase Hosting استنادًا إلى المنتجات التي قمت بتهيئتها في مشروعك المحلي باستخدام firebase init . إذا كنت تريد بدء محاكي معين ، فاستخدم علامة --only :

firebase emulators:start --only functions

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

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

صك تطبيقك للتحدث مع المحاكيات

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

صك تطبيقك للوظائف القابلة للاستدعاء

إذا كانت أنشطة النموذج الأولي والاختبار تتضمن وظائف خلفية قابلة للاستدعاء ، فقم بتكوين التفاعل مع وظائف السحابة لمحاكي 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);
سويفت
Functions.functions().useEmulator(withHost: "localhost", port: 5001)

Web modular API

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "localhost", 5001);

Web namespaced API

firebase.functions().useEmulator("localhost", 5001);

صك تطبيقك لمحاكاة وظائف HTTPS

سيتم تقديم كل وظيفة HTTPS في التعليمات البرمجية الخاصة بك من المحاكي المحلي باستخدام تنسيق عنوان URL التالي:

http:// $HOST : $PORT / $PROJECT / $REGION / $NAME

على سبيل المثال ، سيتم تقديم وظيفة helloWorld بسيطة مع منفذ المضيف الافتراضي والمنطقة على:

https://localhost:5001/ $PROJECT /us-central1/helloWorld

صك تطبيقك لمضاهاة الوظائف التي يتم تشغيلها في الخلفية

يدعم محاكي وظائف السحابة الوظائف التي يتم تشغيلها في الخلفية من المصادر التالية:

  • محاكي Realtime Database
  • محاكي Cloud Firestore
  • محاكي المصادقة
  • محاكي Pub / Sub

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

معالجات الاختبار للأحداث المخصصة المنبعثة من الإضافات

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

لاختبار معالجات الأحداث المخصصة للامتدادات التي تصدر الأحداث ، يجب عليك تثبيت وظائف Cloud ومحاكيات Eventarc.

يعيّن وقت تشغيل وظائف السحابة EVENTARC_EMULATOR متغير البيئة إلى localhost:9299 في العملية الحالية إذا كان محاكي Eventarc قيد التشغيل. تتصل مجموعات Firebase Admin SDK تلقائيًا بمحاكي Eventarc عند تعيين متغير البيئة EVENTARC_EMULATOR . يمكنك تعديل المنفذ الافتراضي كما تمت مناقشته ضمن تكوين مجموعة المحاكي المحلي .

عندما يتم تكوين متغيرات البيئة بشكل صحيح ، يرسل Firebase Admin SDK الأحداث تلقائيًا إلى محاكي Eventarc. بدوره ، يقوم محاكي Eventarc بإعادة الاتصال بمحاكي وظائف السحابة لتشغيل أي معالجات مسجلة.

يمكنك التحقق من سجلات الوظائف في Emulator Suite UI للحصول على تفاصيل حول تنفيذ المعالج.

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

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

سحابة Firestore

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

سحابة التخزين

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

مصادقة Firebase

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

استضافة Firebase

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

تسجيل

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

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

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