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

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

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

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

Firebase CLI इंस्टॉल करना

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

इन चरणों को पूरा करने के बाद, आपके फ़ंक्शन टेस्ट, Admin 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, Realtime Database, और Firebase Hosting के लिए एम्युलेटर शुरू करेगी. ये एम्युलेटर, firebase init का इस्तेमाल करके आपके लोकल प्रोजेक्ट में शुरू किए गए प्रॉडक्ट पर आधारित होंगे. अगर आपको कोई खास एम्युलेटर शुरू करना है, तो --only फ़्लैग का इस्तेमाल करें:

firebase emulators:start --only functions

अगर आपको इम्यूलेटर शुरू होने के बाद, टेस्ट सुइट या टेस्टिंग स्क्रिप्ट चलाना है, तो emulators:exec कमांड का इस्तेमाल करें:

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

अपने ऐप्लिकेशन को एम्युलेटर से कम्यूनिकेट करने के लिए इंस्ट्रूमेंट करें

एम्युलेटर के साथ इंटरैक्ट करने के लिए, आपको अपने ऐप्लिकेशन को इंस्ट्रुमेंट करना होगा. इसके लिए, आपको कुछ और कॉन्फ़िगरेशन करने पड़ सकते हैं.

कॉल किए जा सकने वाले फ़ंक्शन के लिए, अपने ऐप्लिकेशन को इंस्ट्रूमेंट करना

अगर आपके प्रोटोटाइप और टेस्ट की गतिविधियों में कॉल किए जा सकने वाले बैकएंड फ़ंक्शन शामिल हैं, तो Cloud Functions for Firebase एम्युलेटर के साथ इंटरैक्शन को इस तरह कॉन्फ़िगर करें:

Kotlin
// 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().useEmulator(withHost: "localhost", port: 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

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

ट्रिगर की परिभाषाओं के आधार पर, एम्युलेटर अपने-आप टास्क की नकल वाली कतारें सेट अप करता है. साथ ही, अगर Admin SDK को पता चलता है कि यह CLOUD_TASKS_EMULATOR_HOST एनवायरमेंट वैरिएबल के ज़रिए चल रहा है, तो वह कतार में लगे अनुरोधों को एम्युलेटर पर रीडायरेक्ट कर देता है.

ध्यान दें कि प्रोडक्शन में इस्तेमाल किया जाने वाला डिस्पैच सिस्टम, एम्युलेटर में लागू किए गए सिस्टम से ज़्यादा जटिल होता है. इसलिए, आपको यह उम्मीद नहीं करनी चाहिए कि एम्युलेट किए गए व्यवहार, प्रोडक्शन एनवायरमेंट को सटीक तरीके से दिखाएंगे. एम्युलेटर में मौजूद पैरामीटर, टास्क के डिसपैच और फिर से कोशिश करने की दर की ऊपरी सीमा तय करते हैं.

बैकग्राउंड में ट्रिगर होने वाले फ़ंक्शन के इम्यूलेशन के लिए, अपने ऐप्लिकेशन को इंस्ट्रूमेंट करना

Cloud Functions एम्युलेटर, इन सोर्स से बैकग्राउंड में ट्रिगर होने वाले फ़ंक्शन के साथ काम करता है:

  • Realtime Database एम्युलेटर
  • Cloud Firestore एम्युलेटर
  • Authentication एम्युलेटर
  • Pub/Sub एम्युलेटर
  • Firebase Alerts Emulator

बैकग्राउंड इवेंट ट्रिगर करने के लिए, 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 Emulator से कनेक्ट हो जाते हैं. कॉन्फ़िगर करें 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 Admin SDK (वर्शन 9.7.0 या इसके बाद का वर्शन) का इस्तेमाल करते हैं, तो ये राइट ऑपरेशन Cloud Storage एम्युलेटर को भेजे जाएंगे. हालांकि, ऐसा सिर्फ़ तब होगा, जब एम्युलेटर चालू हो. अगर उन राइट ऑपरेशन से अन्य फ़ंक्शन ट्रिगर होते हैं, तो उन्हें Cloud Functions एम्युलेटर में चलाया जाएगा.

Firebase Authentication

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

Firebase होस्टिंग

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

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

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

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

लॉगिंग

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

अगले चरण

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