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

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 के एपीआई या Firebase के अन्य एपीआई के साथ इंटरैक्ट करना है, तो आपको एडमिन क्रेडेंशियल सेट अप करने पड़ सकते हैं.

  • 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
    

    Windows

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

इन चरणों को पूरा करने के बाद, आपके फ़ंक्शन के टेस्ट, Admin SDK टूल का इस्तेमाल करके Firebase और Google के एपीआई को ऐक्सेस कर सकते हैं. उदाहरण के लिए, ट्रिगर को टेस्ट करते समय, एम्युलेट किया गया फ़ंक्शन, admin.auth().getUserByEmail(email) को कॉल कर सकता है.Authentication

फ़ंक्शन कॉन्फ़िगरेशन सेट अप करना (ज़रूरी नहीं)

अगर आपने फ़ंक्शन के कॉन्फ़िगरेशन के लिए, कस्टम वैरिएबल का इस्तेमाल किया है, तो अपने स्थानीय एनवायरमेंट में कस्टम कॉन्फ़िगरेशन पाने के लिए, सबसे पहले यह कमांड चलाएं. इसे 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"

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

ध्यान दें कि एम्युलेटर का आउटपुट, डिफ़ॉल्ट रूप से किसी खास इलाके (us-central1) में फ़ंक्शन के डिप्लॉयमेंट को सिम्युलेट करता है. ऐसा हो सकता है कि यह, प्रोडक्शन में डिप्लॉयमेंट के डिफ़ॉल्ट इलाके से मेल न खाए. इलाकों के बारे में ज़्यादा जानने के लिए, Cloud Functions इलाके देखें.

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

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

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

अगर आपके प्रोटोटाइप और टेस्ट की गतिविधियों में, बैकएंड के कॉल किए जा सकने वाले फ़ंक्शन शामिल हैं, तो 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 की चेतावनियों का एम्युलेटर

बैकग्राउंड इवेंट को ट्रिगर करने के लिए, Emulator Suite UI का इस्तेमाल करके, बैक-एंड के संसाधनों में बदलाव करें. इसके अलावा, अपने प्लैटफ़ॉर्म के लिए एसडीके का इस्तेमाल करके, अपने ऐप्लिकेशन या टेस्ट कोड को एम्युलेटर से कनेक्ट करें .

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

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

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

अगर Eventarc का एम्युलेटर चल रहा है, तो Cloud Functions रनटाइम, मौजूदा प्रोसेस में EVENTARC_EMULATOR एनवायरमेंट वैरिएबल को localhost:9299 पर सेट करता है. Firebase Admin SDKs एनवायरमेंट वैरिएबल सेट होने पर, Eventarc के एम्युलेटर से अपने-आप कनेक्ट हो जाते हैं.EVENTARC_EMULATOR डिफ़ॉल्ट पोर्ट में बदलाव करने के बारे में जानकारी पाने के लिए, Configure 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 Admin SDK टूल (वर्शन 9.3.0 या इसके बाद का वर्शन) का इस्तेमाल करके Firebase Authentication में लिखते हैं, तो ये राइट, Auth के एम्युलेटर पर भेजे जाएंगे. हालांकि, ऐसा तब होगा, जब वह चल रहा हो. अगर उन राइट से अन्य फ़ंक्शन ट्रिगर होते हैं, वे Cloud Functions एम्युलेटर में चलेंगे.

Firebase होस्टिंग

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

Firebase की चेतावनियां

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

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

अगले चरण

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