Cloud Functions शेल, टेस्ट डेटा के साथ फ़ंक्शन को कॉल करने के लिए, इंटरैक्टिव शेल उपलब्ध कराता है. शेल, सभी ट्रिगर टाइप के साथ काम करता है.
एडमिन क्रेडेंशियल सेट अप करना (ज़रूरी नहीं)
अगर आपको अपने फ़ंक्शन के टेस्ट को Firebase Admin SDK की मदद से, Google के एपीआई या Firebase के अन्य एपीआई के साथ इंटरैक्ट कराना है, तो आपको एडमिन क्रेडेंशियल सेट अप करने पड़ सकते हैं.
- Cloud Firestore और Realtime Database ट्रिगर के पास पहले से ही ज़रूरी क्रेडेंशियल होते हैं. इसलिए, इन्हें सेट अप करने की ज़रूरत नहीं होती.
- Firebase के एपीआई (जैसे, Authentication और FCM) या Google के एपीआई (जैसे, Cloud Translation या Cloud Speech) के अलावा, अन्य सभी एपीआई के लिए, इस सेक्शन में बताए गए सेट अप के चरणों को पूरा करना ज़रूरी है. यह तब भी लागू होता है, जब Cloud Functions शेल या
firebase emulators:startका इस्तेमाल किया जा रहा हो.
इम्युलेट किए गए फ़ंक्शन के लिए, एडमिन क्रेडेंशियल सेट अप करने का तरीका:
- सेवा खाते वाला पैनल Google Cloud Console का खोलें.
- पक्का करें कि 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
इन चरणों को पूरा करने के बाद, आपके फ़ंक्शन के टेस्ट, Firebase और
Google के एपीआई को Admin SDK का इस्तेमाल करके ऐक्सेस कर सकते हैं. उदाहरण के लिए,
ट्रिगर की जांच करते समय, इम्युलेट किया गया फ़ंक्शन, Authentication को कॉल कर सकता है
admin.auth().getUserByEmail(email).
Cloud Functions शेल का इस्तेमाल करके फ़ंक्शन दिखाना
Cloud Functions शेल, सभी तरह के फ़ंक्शन ट्रिगर को इम्युलेट करता है. साथ ही, टेस्ट डेटा के साथ फ़ंक्शन को कॉल करने के लिए, इंटरैक्टिव शेल उपलब्ध कराता है. विकल्प, फ़ंक्शन के टाइप के हिसाब से अलग-अलग होते हैं. हालांकि, इस्तेमाल करने का बुनियादी फ़ॉर्मैट यह है:
myFunctionName(data, options)
data पैरामीटर, Realtime Database, Cloud Firestore, और PubSub ट्रिगर के लिए ज़रूरी है. वहीं, अन्य सभी तरह के फ़ंक्शन के लिए यह पैरामीटर ज़रूरी नहीं है.
इसके अलावा, options पैरामीटर सिर्फ़ Realtime Database और 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 एनपीएम मॉड्यूल की तरह ही इस्तेमाल किया जाता है. हालांकि,
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 का इम्युलेशन उपलब्ध नहीं है.
Realtime Database के फ़ंक्शन कॉल करना
Realtime Database के फ़ंक्शन को स्थानीय तौर पर रन करते समय, आपको टेस्ट के लिए सही डेटा देना होगा. इसका आम तौर पर मतलब है कि 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);
Storage और Auth के फ़ंक्शन कॉल करना
Storage और Auth के फ़ंक्शन के लिए, स्थानीय फ़ंक्शन को उस टेस्ट डेटा के साथ कॉल करें जिसे आपको फ़ंक्शन के अंदर देखना है. आपका टेस्ट डेटा, डेटा के इन फ़ॉर्मैट के मुताबिक होना चाहिए:
- Cloud Storage के लिए:
ObjectMetadata - के लिए:
UserRecordAuthentication
सिर्फ़ उन फ़ील्ड के बारे में बताएं जिन पर आपका कोड निर्भर करता है. अगर आपको सिर्फ़ फ़ंक्शन रन करना है, तो किसी भी फ़ील्ड के बारे में न बताएं.