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

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
    

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

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

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

myFunctionName(data, options)

Realtime Database, 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 ফাংশন ইনভোক করা

স্থানীয়ভাবে 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 ফাংশন ইনভোক করা

আপনি কোনও ডেটা ছাড়াই Analytics ফাংশন ইনভোক করতে পারবেন, এর জন্য আপনাকে শেল থেকে 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);

স্টোরেজ ও অথ ফাংশন ইনভোক করা

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

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