ربط تطبيقك بمحاكي Cloud Functions

قبل ربط تطبيقك بمحاكي Cloud Functions، تأكَّد من فهم سير عمل Firebase Local Emulator Suite العام، بالإضافة إلى تثبيته وضبط إعداداته Local Emulator Suite ومراجعة أوامر CLI.

اختيار مشروع في Firebase

يحاكي Firebase Local Emulator Suite المنتجات لمشروع واحد على Firebase.

لتحديد المشروع المراد استخدامه، قبل بدء تشغيل الأجهزة المحاكية، في واجهة سطر الأوامر firebase use في دليل العمل. أو يمكنك تمرير علامة "--project" على كل محاكي الأمر.

تتيح Local Emulator Suite إمكانية محاكاة مشاريع Firebase الحقيقية. لإصدار تجريبي من المشاريع.

نوع المشروع الميزات الاستخدام مع المحاكيات
حقيقي

مشروع Firebase الحقيقي هو المشروع الذي أنشأته وإعداده (على الأرجح عبر وحدة تحكُّم Firebase).

تحتوي المشروعات الحقيقية على موارد مباشرة، مثل مثيلات قاعدة البيانات والتخزين أو المجموعات أو الدوال أو أي مورد آخر أعددته لمنصة Firebase مشروعك.

عند العمل مع مشاريع Firebase حقيقية، يمكنك تشغيل أدوات محاكاة لأي أو جميع المنتجات المعتمدة.

بالنسبة إلى أي منتجات لا تحاكيها، ستتم إزالة التطبيقات والرموز البرمجية. التفاعل مع المورد المباشر (مثيل قاعدة البيانات، والتخزين الحزمة أو الدالة وما إلى ذلك).

تجريبي

لا يتضمن مشروع Firebase التجريبي أي إعداد حقيقي في Firebase لا تتوفر موارد مباشرة. عادة ما يتم الوصول إلى هذه المشروعات من خلال دروس تطبيقية حول الترميز أو برامج تعليمية أخرى.

تتضمّن أرقام تعريف المشاريع الخاصة بالمشاريع التجريبية البادئة demo-.

عند العمل مع مشاريع Firebase التجريبية، تتفاعل تطبيقاتك ورمزك مع المحاكي فقط. إذا حاول تطبيقك التفاعل مع مورد إذا كان المحاكي لا يعمل، فسيفشل هذا الرمز.

ننصحك باستخدام المشاريع التجريبية كلما أمكن ذلك. تتضمّن المزايا ما يلي:

  • إعداد أسهل، حيث يمكنك تشغيل أدوات المحاكاة دون الحاجة إلى إنشاء مشروع في Firebase
  • مستوى أمان أعلى، لأنّه إذا استخدَم الرمز الخاص بك عن طريق الخطأ تطبيقات لم تتم محاكاتها (الإنتاج)، ليست هناك فرصة لتغيير البيانات واستخدامها والفوترة
  • دعم أفضل في وضع عدم الاتصال، نظرًا لعدم الحاجة إلى الاتصال بالإنترنت من أجل تنزيل إعدادات حزمة SDK

استخدِم تطبيقك للتواصل مع المحاكيات

ضبط تطبيقك للدوال القابلة للاستعانة بها

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

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

يُعدّ المحاكي قوائم انتظار مهام تمت محاكاتها تلقائيًا استنادًا إلى المشغّل ، وستعيد "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 لتشغيل أي المعالِجات المسجّلة.

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

ضبط بيئة اختبار على الجهاز

إذا كانت الدوال تعتمد على الدالة Dotenv بيئة التشغيل يمكنك محاكاة هذا السلوك في بيئة الاختبار المحلية.

عند استخدام محاكي Cloud Functions محلي، يمكنك إلغاء البيئة. المتغيرات الخاصة بمشروعك من خلال إعداد ملف .env.local. محتويات تكون الأولوية .env.local على .env وملف .env الخاص بالمشروع.

على سبيل المثال، يمكن أن يتضمن المشروع هذه الملفات الثلاثة التي تحتوي على قيم مختلفة للتطوير والاختبار المحلي:

.env .env.dev .env.local
PLANET=الأرض

الجمهور=البشر

الجمهور=فريق مطوّري البرامج الجمهور=أشخاص محليون

عند بدء تشغيل المحاكي في السياق المحلي، فإنه يحمّل البيئة المتغيرات كما هو موضح:

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

الأسرار وبيانات الاعتماد في محاكي "Cloud Functions"

يتيح المحاكي "Cloud Functions" استخدام المفاتيح السرّية تخزين معلومات الإعداد الحساسة والوصول إليها سيحاول المحاكي بشكل تلقائي الوصول إلى أسرار الإنتاج باستخدام بيانات الاعتماد التلقائية للتطبيق. في بعض الحالات مثل بيئات CI، قد يتعذّر على المحاكي الوصول إلى القيم السرية بسبب قيود الأذونات.

كما هو الحال مع دعم محاكي Cloud Functions لمتغيرات البيئة، يمكنك تجاوز قيم الأسرار من خلال إعداد ملف .secret.local. هذا يجعل من اختبار الدوال محليًا، خاصةً إذا لم يكن لديك وصول إلى القيمة السرية.

ما هي الأدوات الأخرى المتوفّرة لاختبار Cloud Functions؟

يتم استكمال محاكي Cloud Functions بنموذج أوّلي وآخر الأدوات:

  • واجهة أوامر Cloud Functions التي تتيح لك تنفيذ دوال تفاعلية متكررة والنماذج الأولية والتطوير. وتستخدم واجهة الأوامر محاكي Cloud Functions التي تشمل واجهة للتطوير بنمط REPL. لا يوجد تكامل مع ويتم توفير المحاكيات Cloud Firestore أو Realtime Database. باستخدام الواجهات، يمكنك بيانات وهمية وإجراء استدعاءات الدوال لمحاكاة التفاعل مع المنتجات التي لا يتوافق "Local Emulator Suite" حاليًا مع الإحصاءات و"الإعداد عن بُعد" و"Crashlytics".
  • حزمة تطوير البرامج (SDK) لاختبار Firebase لوظائف السحابة الإلكترونية، وهي عبارة عن Node.js مع إطار عمل موكا لتطوير الدوال. في الواقع، توفّر "حزمة تطوير البرامج (SDK) لاختبار دوال Cloud" التشغيل الآلي في أعلى واجهة أوامر Cloud Functions.

يمكنك العثور على مزيد من المعلومات حول Cloud Functions وحزمة Cloud Functions Test SDK. على اختبار الدوال بشكل تفاعلي اختبار وحدة وظائف السحابة الإلكترونية:

الاختلاف بين محاكي "Cloud Functions" ومرحلة الإنتاج

محاكي Cloud Functions قريب إلى حدّ ما من بيئة الإنتاج لمعظم حالات الاستخدام. لقد بذلنا جهدًا مكثفًا في ضمان أن تكون كل المعلومات داخل بيئة تشغيل العقدة أقرب ما يكون إلى الإنتاج. ومع ذلك، لا يحاكي المحاكي بيئة الإنتاج المضمّنة في الحاوية بالكامل، لذلك بينما سيتم تنفيذ التعليمات البرمجية للدالة بشكل واقعي، فإن الجوانب الأخرى (أي الملفات على الجهاز والسلوك بعد أعطال الوظائف وما إلى ذلك) مختلفة.

Cloud IAM

لا تحاول "حزمة محاكي Firebase" تكرار أي سلوك التشغيل المرتبط بإدارة الهوية وإمكانية الوصول. تلتزم أدوات المحاكاة بمعايير الأمان في Firebase يتمّ توفير القواعد، ولكن في الحالات التي يتمّ فيها استخدام إدارة الهوية وإمكانية الوصول عادةً، على سبيل المثال لضبط Cloud Functions التي تستدعي حساب الخدمة، وبالتالي الأذونات، المحاكي غير قابل للتهيئة وسيستخدم الحساب المتاح عالميًا على جهاز مطور البرامج الخاص بك، كما هو الحال عند تشغيل برنامج نصي محلي بشكل مباشر.

القيود المفروضة على الذاكرة والمعالج

لا يفرض المحاكي قيودًا على الذاكرة أو المعالج الأخرى. ومع ذلك، يدعم المحاكي دوال انتهاء المهلة من خلال وسيطة بيئة تشغيل واحدة (timeoutSeconds)

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

التخطيط للاختلافات في البيئات المحلية والإنتاجية

ونظرًا لأن المحاكي يعمل على جهازك المحلي، فإن ذلك يعتمد على جهازك التطبيقات والأدوات المضمنة.

يُرجى الانتباه إلى أنّ بيئتك المحلية لتطوير Cloud Functions قد عن بيئة الإنتاج في Google:

  • التطبيقات التي تثبِّتها محليًا لمحاكاة بيئة الإنتاج (مثل ImageMagick من هذا البرنامج التعليمي) قد تختلف في سلوكها عن مرحلة الإنتاج، خاصةً إذا كنت تحتاج إلى أو تطويرها في بيئة غير Linux. يمكنك استخدام نماذجك الخاصة نسخة ثنائية من البرنامج المفقود إلى جانب نشر الدالة.

  • وبالمثل، قد تعمل الأدوات المساعدة المدمجة (مثل أوامر واجهة الأوامر مثل ls وmkdir) عن الإصدارات المتوفّرة في قناة الإصدار العلني، لا سيّما إذا كنت تطوِّرها في بيئة غير Linux (مثل macOS). يمكنك التعامل مع هذه المشكلة باستخدام بدائل عُقدة فقط للأوامر الأصلية، أو عن طريق إنشاء ثنائيات Linux إلى مع عملية النشر.

جارٍ إعادة المحاولة

لا يتيح محاكي دوال السحابة الإلكترونية إعادة محاولة تنفيذ الدوال عند التعذُّر.

ما هي الخطوات التالية؟