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

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

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

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

قم بتثبيت Firebase CLI

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

npm install -g firebase-tools

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

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

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

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

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

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

  1. افتح جزء حسابات الخدمة في وحدة تحكم Google Cloud.
  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 :

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 لمحاكي 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().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web modular API

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

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

Web namespaced API

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

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

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

  • محاكي قاعدة البيانات في الوقت الحقيقي
  • محاكي Cloud Firestore
  • محاكي المصادقة
  • محاكي الحانة/الفرعية

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

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

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

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

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

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

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

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

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

سحابة فايرستور

إذا كانت لديك وظائف تستخدم 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

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

تسجيل

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

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

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