ইন্টার‍্যাক্টিভভাবে ফাংশন পরীক্ষা করা

Cloud Functions শেল, টেস্ট ডেটা সহ ফাংশন কল করার জন্য ইন্টার‍্যাক্টিভ শেল প্রদান করে। শেল সব ধরনের ট্রিগার সাপোর্ট করে।

অ্যাডমিন ক্রেডেনশিয়াল সেট-আপ করুন (ঐচ্ছিক)

আপনি যদি চান যে আপনার ফাংশন টেস্ট Firebase Admin SDK-এর মাধ্যমে Google API বা অন্যান্য Firebase API-এর সাথে ইন্টার‍্যাক্ট করুক, তাহলে আপনাকে অ্যাডমিন ক্রেডেনশিয়াল সেট-আপ করতে হতে পারে।

  • Cloud Firestore এবং Realtime Database ট্রিগারে আগে থেকেই পর্যাপ্ত ক্রেডেনশিয়াল আছে এবং অতিরিক্ত সেট-আপের প্রয়োজন নেই।
  • Authentication এবং FCM-এর মতো Firebase API বা Cloud Translation বা Cloud Speech-এর মতো Google API সহ অন্যান্য সব API-এর জন্য এই বিভাগে বর্ণনা করা সেট-আপের ধাপগুলি প্রয়োজন। আপনি 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 functions:shell
    

    জানলা

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

এইসব ধাপ সম্পূর্ণ করার পরে, আপনার ফাংশন টেস্ট Admin SDK ব্যবহার করে Firebase এবং Google API অ্যাক্সেস করতে পারবে। যেমন, Authentication ট্রিগার পরীক্ষা করার সময়, এমুলেট করা ফাংশন admin.auth().getUserByEmail(email) কল করতে পারে।

Cloud Functions শেল ব্যবহার করে ফাংশন পরিবেশন করা

Cloud Functions শেল, টেস্ট ডেটা সহ ফাংশন ইনভোক করার জন্য ইন্টার‍্যাক্টিভ শেলের মাধ্যমে সব ধরনের ফাংশন ট্রিগার এমুলেট করে। ফাংশনের ধরন অনুযায়ী বিকল্প আলাদা হয়, তবে ব্যবহারের প্রাথমিক ফর্ম্যাট হল:

myFunctionName(data, options)

রিয়েল-টাইম ডেটাবেস, Cloud Firestore এবং PubSub ট্রিগারের জন্য data প্যারামিটার প্রয়োজন এবং অন্যান্য সব ফাংশনের ধরনের জন্য ঐচ্ছিক। এছাড়াও, ঐচ্ছিক 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

HTTPS ফাংশন ইনভোক করা

শেল-এ HTTPS ফাংশন ইনভোক করার জন্য, ব্যবহার 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' })

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-এর এমুলেশন বর্তমানে উপলভ্য নেই।

রিয়েল-টাইম ডেটাবেস ফাংশন ইনভোক করুন

স্থানীয়ভাবে 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);

স্টোরেজ এবং Auth ফাংশন চালু করুন

Storage ও Auth ফাংশনের জন্য, ফাংশনের মধ্যে আপনি যে টেস্ট ডেটা দেখতে চান, সেটি দিয়ে লোকাল ফাংশন ইনভোক করুন। আপনার টেস্ট ডেটা অবশ্যই সংশ্লিষ্ট ডেটা ফর্ম্যাট অনুসরণ করতে হবে:

আপনার কোড যেসব ফিল্ডের উপর নির্ভর করে শুধু সেগুলি উল্লেখ করুন অথবা আপনি যদি শুধু ফাংশনটি চালাতে চান, তাহলে কোনও ফিল্ড উল্লেখ করবেন না।