Cloud Functions शेल, टेस्ट डेटा के साथ फ़ंक्शन को ट्रिगर करने के लिए एक इंटरैक्टिव शेल उपलब्ध कराता है. शेल, सभी तरह के ट्रिगर के साथ काम करता है.
एडमिन क्रेडेंशियल सेट अप करना (ज़रूरी नहीं)
अगर आपको अपने फ़ंक्शन टेस्ट को 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
, दोनों पर लागू होता है.
एमुलेट किए गए फ़ंक्शन के लिए एडमिन क्रेडेंशियल सेट अप करने के लिए:
- Google Cloud कंसोल का सेवा खाता पैनल खोलें.
- पक्का करें कि App Engine डिफ़ॉल्ट सेवा खाता चुना गया हो. इसके बाद, दाईं ओर मौजूद विकल्प मेन्यू का इस्तेमाल करके, पासकोड बनाएं को चुनें.
- जब कहा जाए, तब कुंजी के टाइप के लिए JSON चुनें और बनाएं पर क्लिक करें.
डाउनलोड की गई कुंजी पर ले जाने के लिए, Google के डिफ़ॉल्ट क्रेडेंशियल सेट करें:
Unix
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 को ऐक्सेस कर सकते हैं. उदाहरण के लिए, Authentication ट्रिगर की जांच करते समय, एमुलेट किया गया फ़ंक्शन admin.auth().getUserByEmail(email)
को कॉल कर सकता है.
Cloud Functions शेल का इस्तेमाल करके फ़ंक्शन चलाना
Cloud Functions शेल, सभी तरह के फ़ंक्शन ट्रिगर को एक इंटरैक्टिव शेल के साथ एमुलेट करता है. इससे, टेस्ट डेटा के साथ फ़ंक्शन को ट्रिगर किया जा सकता है. विकल्प, फ़ंक्शन टाइप के हिसाब से अलग-अलग होते हैं. हालांकि, इस्तेमाल का बुनियादी फ़ॉर्मैट यह है:
myFunctionName(data, options)
data
पैरामीटर, रीयलटाइम डेटाबेस, Cloud Firestore, और PubSub ट्रिगर के लिए ज़रूरी है. हालांकि, यह अन्य सभी तरह के फ़ंक्शन के लिए ज़रूरी नहीं है.
साथ ही, वैकल्पिक options
पैरामीटर सिर्फ़ रीयलटाइम डेटाबेस और Cloud Firestore फ़ंक्शन के लिए मान्य है.
इसके अलावा, फ़ाइल को वैरिएबल के तौर पर सेव करके और उससे फ़ंक्शन को कॉल करके, किसी स्थानीय फ़ाइल से टेस्ट डेटा लोड किया जा सकता है:
var data = require('./path/to/testData.json');
myFunction(data);
Cloud Functions शेल इंस्टॉल और कॉन्फ़िगर करना
इस सुविधा का इस्तेमाल करने के लिए, firebase-tools
का कम से कम वर्शन 3.11.0 और
firebase-functions
SDK टूल का कम से कम वर्शन 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
एचटीटीपीएस फ़ंक्शन को लागू करना
शेल में एचटीटीपीएस फ़ंक्शन को इस्तेमाल करने का तरीका, request
NPM मॉड्यूल के इस्तेमाल के तरीके जैसा ही है. हालांकि, 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' })
एचटीटीपीएस कॉल किए जा सकने वाले फ़ंक्शन को शुरू करना
एचटीटीपीएस कॉल करने लायक फ़ंक्शन को स्थानीय तौर पर लागू करते समय, आपको सही टेस्ट डेटा देना होगा.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
इसके अलावा, दूसरे पैरामीटर के तौर पर Firebase-Instance-ID-token
भी पास किया जा सकता है. यह एक स्ट्रिंग होनी चाहिए.
# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})
फ़िलहाल, context.auth
का एमुलेटर उपलब्ध नहीं है.
रीयलटाइम डेटाबेस फ़ंक्शन को कॉल करना
रीयल टाइम डेटाबेस फ़ंक्शन को स्थानीय तौर पर चलाते समय, आपको सही टेस्ट डेटा देना होगा. आम तौर पर, इसका मतलब है कि onCreate
ऑपरेशन के लिए नया टेस्ट डेटा, onDelete
ऑपरेशन के लिए पुराना/हटाया गया डेटा, और 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}})
डिफ़ॉल्ट रूप से, शेल, एडमिन (सेवा खाते) के ऐक्सेस लेवल के साथ Realtime Database फ़ंक्शन चलाता है. किसी खास ग्राहक या पुष्टि न किए गए उपयोगकर्ता के तौर पर फ़ंक्शन चलाने के लिए, auth
विकल्प का इस्तेमाल करें:
# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})
Firestore फ़ंक्शन को कॉल करना
Firestore फ़ंक्शन को स्थानीय तौर पर चलाते समय, आपको सही टेस्ट डेटा देना होगा. आम तौर पर, इसका मतलब है कि onCreate
ऑपरेशन के लिए नया टेस्ट डेटा, onDelete
ऑपरेशन के लिए पुराना/हटाया गया डेटा, और onUpdate
या onWrite
फ़ंक्शन के लिए दोनों डेटा उपलब्ध कराना. ध्यान दें कि Firestore डेटा,
की-वैल्यू पेयर होना चाहिए. इस्तेमाल किए जा सकने वाले डेटा टाइप देखें.
# 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}})
शेल हमेशा एडमिन के लेवल पर Firestore फ़ंक्शन चलाता है. इसका मतलब है कि वह किसी इवेंट को बनाने/अपडेट करने/मिटाने की प्रोसेस को एडमिन के तौर पर चलाता है.
PubSub फ़ंक्शन को शुरू करना
PubSub फ़ंक्शन के लिए, अपने मैसेज के पेलोड को Buffer
इंस्टेंस में डालें और वैकल्पिक रूप से डेटा एट्रिब्यूट जोड़ें, जैसा कि दिखाया गया है:
// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})
Analytics फ़ंक्शन को लागू करना
शेल में myAnalyticsFunction()
चलाकर, बिना किसी डेटा के Analytics फ़ंक्शन को चालू किया जा सकता है.
टेस्ट डेटा के साथ फ़ंक्शन चलाने के लिए, उन खास इवेंट डेटा फ़ील्ड के लिए वैरिएबल तय करने का सुझाव दिया जाता है जिनकी आपके फ़ंक्शन को ज़रूरत है:
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);
स्टोरेज और पुष्टि करने की सुविधाओं को चालू करना
स्टोरेज और पुष्टि करने वाले फ़ंक्शन के लिए, उस स्थानीय फ़ंक्शन को उस टेस्ट डेटा के साथ चालू करें जिसे आपको फ़ंक्शन में देखना है. आपका टेस्ट डेटा, इन डेटा फ़ॉर्मैट के मुताबिक होना चाहिए:
- Cloud Storage के लिए:
ObjectMetadata
- Authentication के लिए:
UserRecord
सिर्फ़ उन फ़ील्ड की जानकारी दें जिन पर आपका कोड निर्भर करता है. अगर आपको सिर्फ़ फ़ंक्शन चलाना है, तो कोई भी फ़ील्ड न दें.