फ़ंक्शन को स्थानीय तौर पर चलाएं

Firebase CLI में एक Cloud Functions एमुलेटर शामिल होता है, जो इन फ़ंक्शन टाइप को एमुलेट कर सकता है:

  • एचटीटीपीएस फ़ंक्शन
  • कॉल किए जा सकने वाले फ़ंक्शन
  • टास्क की सूची में मौजूद टास्क के फ़ंक्शन
  • Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage से ट्रिगर किए गए बैकग्राउंड फ़ंक्शन, Firebase की सूचनाओं और Cloud Pub/Sub के साथ काम करते हैं.

प्रोडक्शन में डिप्लॉय करने से पहले, फ़ंक्शन को स्थानीय तौर पर चलाकर उनकी जांच की जा सकती है.

Firebase सीएलआई इंस्टॉल करें

Cloud Functions एमुलेटर का इस्तेमाल करने के लिए, पहले Firebase CLI इंस्टॉल करें:

npm install -g firebase-tools

लोकल एमुलेटर का इस्तेमाल करने के लिए, आपका Cloud Functions इन पर निर्भर होना चाहिए:

  • firebase-admin वर्शन 8.0.0 या इसके बाद वाला वर्शन.
  • firebase-functions का 3.0.0 या इसके बाद का वर्शन.

एडमिन क्रेडेंशियल सेट अप करना (ज़रूरी नहीं)

अगर आपको अपने फ़ंक्शन टेस्ट को Firebase Admin SDK टूल की मदद से, Google API या अन्य Firebase API के साथ इंटरैक्ट करना है, तो आपको एडमिन क्रेडेंशियल सेट अप करने पड़ सकते हैं.

  • Cloud Firestore और Realtime Database ट्रिगर में पहले से ही ज़रूरी क्रेडेंशियल मौजूद होते हैं. साथ ही, इनके लिए अलग से सेटअप करने की ज़रूरत नहीं होती.
  • Authentication और FCM जैसे Firebase API या Cloud Translation या Cloud Speech जैसे Google API के साथ-साथ, अन्य सभी एपीआई के लिए, इस सेक्शन में बताए गए सेटअप चरणों का पालन करना ज़रूरी है. यह तब भी लागू होता है, जब Cloud Functions शेल का इस्तेमाल किया जा रहा हो या 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
    

    शीशा

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

यह तरीका अपनाने के बाद, आपके फ़ंक्शन टेस्ट एडमिन SDK का इस्तेमाल करके, Firebase और Google API को ऐक्सेस कर सकते हैं. उदाहरण के लिए, 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, रीयलटाइम डेटाबेस, और Firebase होस्टिंग के लिए एमुलेटर शुरू करेगा. यह उन प्रॉडक्ट के आधार पर होगा जिन्हें आपने 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);

एचटीटीपीएस फ़ंक्शन के इम्यूलेशन के लिए, अपने ऐप्लिकेशन को इंस्ट्रूमेंट करना

आपके कोड में मौजूद हर एचटीटीपीएस फ़ंक्शन, स्थानीय एमुलेटर से इस यूआरएल फ़ॉर्मैट का इस्तेमाल करके दिखाया जाएगा:

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 टूल का इस्तेमाल करने वाले एम्युलेटर से अपना ऐप्लिकेशन या टेस्ट कोड कनेक्ट करके भी ऐसा किया जा सकता है.

एक्सटेंशन से जनरेट होने वाले कस्टम इवेंट के लिए, हैंडलर की जांच करें

Cloud Functions v2 के साथ Firebase Extensions कस्टम इवेंट मैनेज करने के लिए लागू किए गए फ़ंक्शन के लिए, Cloud Functions एमुलेटर, Eventarc ट्रिगर के साथ काम करने के लिए, Eventarc एमुलेटर के साथ जोड़ा जाता है.

इवेंट उत्सर्जित करने वाले एक्सटेंशन के लिए कस्टम इवेंट हैंडलर की जांच करने के लिए, आपको Cloud Functions और Eventarc इम्युलेटर इंस्टॉल करने होंगे.

अगर Eventarc एमुलेटर चल रहा है, तो Cloud Functions रनटाइम, मौजूदा प्रोसेस में EVENTARC_EMULATOR एनवायरमेंट वैरिएबल को localhost:9299 पर सेट करता है. EVENTARC_EMULATOR एनवायरमेंट वैरिएबल सेट होने पर, Firebase Admin SDK अपने-आप Eventarc एम्युलेटर से कनेक्ट हो जाते हैं. Local Emulator Suite कॉन्फ़िगर करें में बताए गए तरीके से, डिफ़ॉल्ट पोर्ट में बदलाव किया जा सकता है.

जब एनवायरमेंट वैरिएबल सही तरीके से कॉन्फ़िगर किए जाते हैं, तो Firebase Admin SDK Eventarc एमुलेटर को इवेंट अपने-आप भेजता है. इसके बदले में, Eventarc एम्युलेटर, किसी भी रजिस्टर किए गए हैंडलर को ट्रिगर करने के लिए, Cloud Functions एम्युलेटर को वापस कॉल करता है.

हैंडलर को एक्ज़ीक्यूट करने के बारे में जानने के लिए, Emulator Suite UI में फ़ंक्शन लॉग देखें.

अन्य सेवाओं के साथ इंटरैक्शन

एम्युलेटर सुइट में कई एम्युलेटर शामिल होते हैं. इनकी मदद से, अलग-अलग प्रॉडक्ट के इंटरैक्शन की जांच की जा सकती है.

Cloud Firestore

अगर आपके पास ऐसे फ़ंक्शन हैं जो Cloud Firestore में लिखने के लिए Firebase Admin SDK टूल का इस्तेमाल करते हैं, तो ये लिखने की कार्रवाइयां Cloud Firestore एमुलेटर को भेजी जाएंगी. हालांकि, ऐसा तब ही होगा, जब एमुलेटर चल रहा हो. अगर उन लिखावटों से और फ़ंक्शन ट्रिगर होते हैं, तो उन्हें Cloud Functions एमुलेटर में चलाया जाएगा.

Cloud Storage

अगर आपके पास ऐसे फ़ंक्शन हैं जो Cloud Storage पर लिखने के लिए Firebase एडमिन SDK (वर्शन 9.7.0 या उसके बाद के वर्शन) का इस्तेमाल करते हैं, तो ये लेख Cloud Storage एम्युलेटर को भेजे जाएंगे अगर वह काम कर रहा है. अगर उन लिखावटों से और फ़ंक्शन ट्रिगर होते हैं, तो उन्हें Cloud Functions एमुलेटर में चलाया जाएगा.

Firebase Authentication

अगर आपके पास ऐसे फ़ंक्शन हैं जो Firebase Authentication में लिखने के लिए, Firebase Admin SDK टूल (9.3.0 या इसके बाद का वर्शन) का इस्तेमाल करते हैं, तो ये लिखने की कार्रवाइयां Auth एमुलेटर को भेजी जाएंगी. हालांकि, ऐसा तब ही होगा, जब Auth एमुलेटर चल रहा हो. अगर उन लिखावटों से और फ़ंक्शन ट्रिगर होते हैं, तो उन्हें Cloud Functions एमुलेटर में चलाया जाएगा.

Firebase होस्टिंग

अगर Firebase Hosting के लिए डाइनैमिक कॉन्टेंट जनरेट करने के लिए Cloud Functions का इस्तेमाल किया जा रहा है, तो firebase emulators:start आपके लोकल एचटीटीपी फ़ंक्शन को होस्ट करने के लिए प्रॉक्सी के तौर पर इस्तेमाल करता है.

Firebase से मिलने वाली सूचनाएं

किसी भी प्रोजेक्ट में, जिसमें कम से कम एक काम करने वाला Firebase सूचना ट्रिगर शामिल हो, एम्युलेटर यूज़र इंटरफ़ेस (यूआई) में एक FireAlerts टैब शामिल होता है. सूचना ट्रिगर को एम्युलेट करने के लिए:

  1. FireAlerts टैब खोलें. यह टैब, उन सूचना टाइप का ड्रॉपडाउन दिखाता है जिनके साथ ट्रिगर जुड़े होते हैं. उदाहरण के लिए, अगर आपके पास onNewFatalIssuePublished ट्रिगर है, तो crashlytics.newFatalIssue दिखेगा.
  2. सूचना का टाइप चुनें. फ़ॉर्म में डिफ़ॉल्ट वैल्यू अपने-आप भर जाती हैं. इनमें बदलाव किया जा सकता है. आपके पास इवेंट के फ़ील्ड में बदलाव करने का विकल्प होता है. सूचना वाले इवेंट की अन्य जानकारी, अनुमानित, मॉक वैल्यू या रैंडम तौर पर जनरेट की गई होती है.
  3. फ़ंक्शन एमुलेटर को सिंथेटिक सूचना भेजने के लिए, सूचना भेजें चुनें. साथ ही, Firebase कंसोल में सूचनाएं में लॉगिंग की सुविधा उपलब्ध है.

लॉगिंग

एम्युलेटर आपके फ़ंक्शन से टर्मिनल विंडो पर लॉग स्ट्रीम करता है, जहां वे चलते हैं. यह आपके फ़ंक्शन में console.log(), console.info(), console.error(), और console.warn() स्टेटमेंट का पूरा आउटपुट दिखाता है.

अगले चरण

Firebase एमुलेटर सुइट का इस्तेमाल करने का पूरा उदाहरण देखने के लिए, टेस्टिंग का क्विकस्टार्ट सैंपल देखें.