پوسته Cloud Functions پوستهای تعاملی برای فراخواندن توابع با دادههای آزمایشی ارائه میدهد. پوسته از همه انواع راهانداز پشتیبانی میکند.
راهاندازی اطلاعات اعتباری سرپرست (اختیاری)
اگر میخواهید تستهای تابع شما ازطریق کیت توسعه نرمافزار Firebase Admin با Google APIs یا دیگر Firebase APIs تعامل داشته باشد، ممکن است لازم باشد اطلاعات اعتباری سرپرست را راهاندازی کنید.
- Cloud Firestore و Realtime Database محرک ازقبل اطلاعات اعتباری کافی دارند و به راهاندازی اضافی نیاز ندارند.
- همه «میاناهای برنامهسازی کاربردی» دیگر، ازجمله «میاناهای برنامهسازی کاربردی» Firebase مثل Authentication و FCM یا «میاناهای برنامهسازی کاربردی» Google مثل Cloud Translation یا Cloud Speech، به مراحل راهاندازی که در این بخش توضیح داده شده است نیاز دارند. این مورد چه از پوسته 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
پساز تکمیل این مراحل، تستهای تابع شما میتوانند بااستفاده از کیت توسعه نرمافزار سرپرست به Firebase و
Google APIs دسترسی پیدا کنند. برای مثال، هنگام آزمایش
راهانداز 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 باید حداقل نسخه ۳.۱۱.۰ را داشته باشد و
«کیت توسعه نرمافزار» firebase-functions باید حداقل نسخه ۰.۶.۲ را داشته باشد. برای بهروزرسانی هر دو،
فرمانهای زیر را در فهرست راهنمای 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 Callable
هنگام فراخوانی توابع «فراخوانشدنی 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 دردسترس نیست.
فراخوانی توابع «پایگاه داده بیدرنگ»
هنگام اجرای توابع «پایگاه داده بیدرنگ» بهصورت محلی، باید دادههای آزمایش مناسب ارائه دهید. این معمولاً به این معنی است که دادههای آزمایشی جدیدی برای
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}})
بهطور پیشفرض، پوسته توابع «پایگاه داده همزمان» را با امتیازات سرپرست (حساب سرویس) اجرا میکند. از گزینه 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’} })
علاوهبر before/after فیلد شیء data،
میتوانید از فیلدهای params در شیء options برای شبیهسازی
کارتهای عام در نام سند استفاده کنید:
# 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);
فراخوانی عملکردهای «فضای ذخیرهسازی» و «احراز هویت»
برای تابعهای «فضای ذخیرهسازی» و «اصالتسنجی»، تابع محلی را با دادههای آزمایشی که میخواهید در تابع ببینید فراخوانی کنید. دادههای آزمایشی شما باید از قالبهای داده مربوطه پیروی کند:
- برای Cloud Storage:
ObjectMetadata - برای Authentication:
UserRecord
فقط فیلدهایی را که کدتان به آنها وابسته است مشخص کنید، یا اگر فقط میخواهید تابع را اجرا کنید، هیچ فیلدی را مشخص نکنید.