Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

अंतःक्रियात्मक रूप से परीक्षण कार्य

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

क्लाउड फ़ंक्शंस शेल टेस्ट डेटा के साथ फ़ंक्शंस को लागू करने के लिए एक इंटरैक्टिव शेल प्रदान करता है। शेल सभी ट्रिगर प्रकारों का समर्थन करता है।

एडमिन क्रेडेंशियल सेट अप करें (वैकल्पिक)

अगर आप चाहते हैं कि आपके फ़ंक्शन परीक्षण Google API या अन्य Firebase API के साथ Firebase Admin SDK के माध्यम से सहभागिता करें, तो आपको व्यवस्थापकीय क्रेडेंशियल्स सेट करने की आवश्यकता हो सकती है।

  • Cloud Firestore और रीयलटाइम डेटाबेस ट्रिगर के पास पहले से ही काफ़ी क्रेडेंशियल हैं और उन्हें अतिरिक्त सेटअप की ज़रूरत नहीं है।
  • फायरबेस एपीआई जैसे ऑथेंटिकेशन और एफसीएम या गूगल एपीआई जैसे क्लाउड ट्रांसलेशन या क्लाउड स्पीच सहित अन्य सभी एपीआई को इस खंड में वर्णित सेटअप चरणों की आवश्यकता होती है। यह लागू होता है कि आप क्लाउड फ़ंक्शंस शेल का उपयोग कर रहे हैं या firebase emulators:start का।

अनुकरणीय कार्यों के लिए व्यवस्थापक क्रेडेंशियल्स सेट अप करने के लिए:

  1. Google क्लाउड कंसोल का सेवा खाता फलक खोलें।
  2. सुनिश्चित करें कि ऐप इंजन डिफ़ॉल्ट सेवा खाता चुना गया है, और कुंजी बनाएं का चयन करने के लिए दाईं ओर विकल्प मेनू का उपयोग करें।
  3. संकेत दिए जाने पर, कुंजी प्रकार के लिए JSON चुनें और बनाएं क्लिक करें.
  4. डाउनलोड की गई कुंजी को इंगित करने के लिए अपने Google डिफ़ॉल्ट क्रेडेंशियल सेट करें:

    यूनिक्स

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase functions:shell
    

    खिड़कियाँ

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase functions:shell
    

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

क्लाउड फ़ंक्शंस शेल का उपयोग करके फ़ंक्शन परोसें

क्लाउड फ़ंक्शंस शेल परीक्षण डेटा के साथ फ़ंक्शन को लागू करने के लिए एक इंटरैक्टिव शेल के साथ सभी प्रकार के फ़ंक्शन ट्रिगर्स का अनुकरण करता है। फ़ंक्शन प्रकार के अनुसार विकल्प भिन्न होते हैं, लेकिन मूल उपयोग प्रारूप है:

myFunctionName(data, options)

रीयलटाइम डेटाबेस, क्लाउड फायरस्टोर और पबसब ट्रिगर्स के लिए data पैरामीटर आवश्यक है, और अन्य सभी प्रकार के फ़ंक्शन के लिए वैकल्पिक है। साथ ही, वैकल्पिक options पैरामीटर केवल रीयलटाइम डेटाबेस और क्लाउड फायरस्टोर कार्यों के लिए मान्य है।

वैकल्पिक रूप से, आप फ़ाइल को एक चर के रूप में सहेज कर और इसके साथ एक फ़ंक्शन का आह्वान करके एक स्थानीय फ़ाइल से परीक्षण डेटा लोड कर सकते हैं:

var data = require('./path/to/testData.json');
myFunction(data);

क्लाउड फ़ंक्शंस शेल को स्थापित और कॉन्फ़िगर करें

इस सुविधा का उपयोग करने के लिए, firebase-tools का न्यूनतम संस्करण 3.11.0 होना चाहिए, और फायरबेस firebase-functions एसडीके का न्यूनतम संस्करण 0.6.2 होना चाहिए। दोनों को अद्यतन करने के लिए, अपने प्रोजेक्ट के लिए functions/ निर्देशिका में निम्न कमांड चलाएँ:

npm install --save firebase-functions@latest
npm install -g firebase-tools

यदि आप कस्टम फ़ंक्शन कॉन्फ़िगरेशन चर का उपयोग कर रहे हैं, तो पहले अपने स्थानीय परिवेश में अपना कस्टम कॉन्फ़िगरेशन प्राप्त करने के लिए कमांड चलाएँ (इसे functions निर्देशिका में चलाएँ):

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

अंत में, निम्नलिखित कमांड के साथ शेल चलाएँ:

firebase functions:shell

HTTPS कार्यों को आमंत्रित करें

शेल में HTTPS फ़ंक्शंस को लागू करने के लिए, उपयोग NPM मॉड्यूल के request के समान है, लेकिन request को उस फ़ंक्शन के नाम से बदलें जिसे आप अनुकरण करना चाहते हैं। उदाहरण के लिए:

# invoke
myHttpsFunction()
myHttpsFunction.get()
myHttpsFunction.post()

# invoke at sub-path
myHttpsFunction('/path')
myHttpsFunction.get('/path')
myHttpsFunction.post('/path')

# send POST request with form data
myHttpsFunction.post('/path').form( {foo: 'bar' })

HTTPS कॉल करने योग्य फ़ंक्शन प्रारंभ करें

HTTPS कॉल करने योग्य फ़ंक्शन को स्थानीय रूप से प्रारंभ करते समय, आपको उपयुक्त परीक्षण डेटा प्रदान करने की आवश्यकता होगी।

# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})

वैकल्पिक रूप से, आप दूसरे पैरामीटर के रूप में Firebase-Instance-ID-token में पास कर सकते हैं। यह एक स्ट्रिंग होना चाहिए।

# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})

context.auth का अनुकरण वर्तमान में अनुपलब्ध है।

रीयलटाइम डेटाबेस फ़ंक्शन प्रारंभ करें

रीयलटाइम डेटाबेस स्थानीय रूप से काम करते समय, आपको उचित परीक्षण डेटा प्रदान करने की आवश्यकता होगी। इसका आम तौर पर मतलब है कि onDelete onCreate के लिए पुराना/हटा दिया गया डेटा, और onUpdate या onWrite फ़ंक्शंस दोनों के लिए:

# invoke onCreate function
myDatabaseFunction('new_data')

# invoke onDelete function
myDatabaseFunction('old_data')

# invoke onUpdate or onWrite function
myDatabaseFunction({before: 'old_data', after: 'new_data' })

before/after विकल्पों के अलावा, शेल एक पथ में मॉकिंग वाइल्डकार्ड में उपयोग करने के लिए params विकल्प प्रदान करता है:

# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})

डिफ़ॉल्ट रूप से, शेल व्यवस्थापक (सेवा खाता) विशेषाधिकारों के साथ रीयलटाइम डेटाबेस फ़ंक्शन चलाता है। किसी विशेष अंतिम उपयोगकर्ता के रूप में, या एक अप्रमाणित उपयोगकर्ता के रूप में कार्यों को चलाने के लिए auth विकल्प का उपयोग करें:

# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})

फायरस्टार कार्यों को आमंत्रित करें

Firestore फ़ंक्शन को स्थानीय रूप से चलाते समय, आपको उपयुक्त परीक्षण डेटा प्रदान करने की आवश्यकता होगी। इसका आम तौर पर मतलब है कि onDelete onCreate के लिए पुराना/हटा दिया गया डेटा और onUpdate या onWrite फ़ंक्शंस दोनों के लिए उपलब्ध कराना। ध्यान दें कि फायरस्टोर डेटा को की-वैल्यू पेयर होना चाहिए; समर्थित डेटा प्रकार देखें।

# invoke onCreate function
myFirestoreFunction({foo: ‘new’})

# invoke onDelete function
myFirestoreFunction({foo: ‘old’})

# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })

data ऑब्जेक्ट के before/after क्षेत्रों के अतिरिक्त, आप दस्तावेज़ नाम में वाइल्डकार्ड को नकली करने के लिए options ऑब्जेक्ट पर params फ़ील्ड का उपयोग कर सकते हैं:

# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})

शेल हमेशा एडमिनिस्ट्रेटिव विशेषाधिकारों के साथ फायरस्टार फ़ंक्शंस चलाता है, जिसका अर्थ है कि यह एक क्रिएट/अपडेट/डिलीट इवेंट का मज़ाक उड़ाता है जैसे कि यह एक प्रशासनिक उपयोगकर्ता द्वारा किया गया हो।

पबसब कार्यों को आमंत्रित करें

PubSub फ़ंक्शंस के लिए, अपने संदेश पेलोड को Buffer आवृत्ति में सम्मिलित करें और दिखाए गए अनुसार वैकल्पिक रूप से डेटा विशेषताएँ जोड़ें:

// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})

विश्लेषिकी कार्यों को आमंत्रित करें

आप शेल में myAnalyticsFunction() चलाकर बिना किसी डेटा के एनालिटिक्स फ़ंक्शन का आह्वान कर सकते हैं। फ़ंक्शन को परीक्षण डेटा के साथ चलाने के लिए, विशिष्ट ईवेंट डेटा फ़ील्ड के लिए एक चर परिभाषित करने की अनुशंसा की जाती है जिसकी आपके फ़ंक्शन को आवश्यकता होती है:

var data = {
  eventDim: [{
    // populates event.data.params
    params: {foo: {stringValue: 'bar'} },
    // Also valid:
    //   {intValue: '10'}, {floatValue: '1.0'}, {doubleValue: '1.0'}
    // populates event.data.name
    name: 'event_name',
    // populates event.data.logTime, specify in microseconds
    timestampMicros: Date.now() * 1000,
    // populates event.data.previousLogTime, specify in microseconds
    previousTimestampMicros: Date.now() * 1000,
    // populates event.data.reportingDate, specify in 'YYYYMMDD' format
    date: '20170930',
    // populates event.data.valueInUSD
    valueInUsd: 230
  }],
  userDim: userDim
};

myAnalyticsFunction(data);

संग्रहण और प्रमाणीकरण कार्यों को प्रारंभ करें

संग्रहण और प्रामाणिक कार्यों के लिए, स्थानीय फ़ंक्शन को परीक्षण डेटा के साथ प्रारंभ करें जिसे आप फ़ंक्शन के अंदर देखना चाहते हैं। आपके परीक्षण डेटा को संबंधित डेटा स्वरूपों का पालन करना चाहिए:

  • क्लाउड स्टोरेज के लिए: ObjectMetadata
  • प्रमाणीकरण के लिए: UserRecord

केवल वे फ़ील्ड निर्दिष्ट करें जिन पर आपका कोड निर्भर करता है, या कोई भी नहीं यदि आप केवल फ़ंक्शन चलाना चाहते हैं।