قم بتوصيل تطبيقك بـ Cloud Functions Emulator

قبل توصيل تطبيقك بمحاكي Cloud Functions ، تأكد من فهمك لسير عمل Firebase Local Emulator Suite بشكل عام ، وأنك تقوم بتثبيت وتهيئة Local Emulator Suite ومراجعة أوامر CLI الخاصة بها.

اختر مشروع Firebase

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

لتحديد المشروع المراد استخدامه ، قبل بدء المحاكيات ، في CLI ، firebase use في دليل العمل الخاص بك. أو يمكنك تمرير علامة --project إلى كل أمر محاكي.

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

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

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

تحتوي المشاريع الحقيقية على موارد مباشرة ، مثل طبعات قواعد البيانات أو حاويات التخزين أو الوظائف أو أي مورد آخر تقوم بإعداده لمشروع Firebase هذا.

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

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

تجريبي

لا يحتوي مشروع Firebase التجريبي على تهيئة Firebase حقيقية ولا موارد مباشرة. يتم الوصول إلى هذه المشاريع عادةً عبر مختبرات الرموز أو البرامج التعليمية الأخرى.

معرفات المشروع للمشاريع التجريبية لها demo- التجريبية.

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

نوصيك باستخدام المشاريع التجريبية حيثما أمكن ذلك. الفوائد تشمل:

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

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

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

إذا كانت أنشطة النموذج الأولي والاختبار تتضمن وظائف خلفية قابلة للاستدعاء ، فقم بتكوين التفاعل مع وظائف السحابة لمحاكي Firebase مثل هذا:

ذكري المظهر
        // 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://localhost:5001")

Web version 9

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

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

Web version 8

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

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

تكوين بيئة اختبار محلية

إذا كانت وظائفك تعتمد على تكوين البيئة المستند إلى dotenv ، فيمكنك محاكاة هذا السلوك في بيئة الاختبار المحلية الخاصة بك.

عند استخدام محاكي وظائف السحابة المحلي ، يمكنك تجاوز متغيرات البيئة لمشروعك من خلال إعداد ملف .env.local . محتويات .env.local لها الأسبقية على .env وملف .env الخاص بالمشروع.

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

.env .env.dev .env.local
كوكب = الأرض

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

الجمهور = ديف البشر AUDIENCE = البشر المحليين

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

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

الأسرار وبيانات الاعتماد في محاكي وظائف السحابة

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

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

ما هي الأدوات الأخرى الموجودة لاختبار وظائف السحابة؟

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

  • هيكل وظائف السحابة ، والذي يسمح بوضع النماذج الأولية والوظائف التكرارية التفاعلية وتطويرها. تستخدم القشرة محاكي وظائف السحابة بواجهة REPL للتطوير. لا يوجد تكامل مع محاكيات Cloud Firestore أو Realtime Database. باستخدام shell ، يمكنك محاكاة البيانات وإجراء استدعاءات وظيفية لمحاكاة التفاعل مع المنتجات التي لا تدعمها Local Emulator Suite حاليًا: التحليلات والتكوين عن بُعد و Crashlytics.
  • Firebase Test SDK لوظائف السحابة ، Node.js مع إطار عمل mocha لتطوير الوظائف. في الواقع ، توفر SDK لاختبار وظائف السحابة أتمتة أعلى هيكل وظائف السحابة.

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

كيف يختلف محاكي وظائف السحابة عن الإنتاج

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

سحابة IAM

لا يحاول Firebase Emulator Suite تكرار أو احترام أي سلوك متعلق بـ IAM للتشغيل. تلتزم المحاكيات بقواعد أمان Firebase المقدمة ، ولكن في الحالات التي يتم فيها استخدام IAM عادةً ، على سبيل المثال لتعيين وظائف السحابة التي تستدعي حساب الخدمة وبالتالي الأذونات ، فإن المحاكي غير قابل للتكوين وسيستخدم الحساب المتاح عالميًا على جهاز المطور الخاص بك ، مشابه لتشغيل برنامج نصي محلي مباشرة.

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

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

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

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

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

اعلم أن بيئتك المحلية لتطوير وظائف السحابة قد تختلف عن بيئة إنتاج Google:

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

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

إعادة المحاولة

لا يدعم محاكي وظائف السحابة وظائف إعادة المحاولة عند الفشل.

ماذا بعد؟