پوسته توابع ابری (Cloud Functions shell) یک پوسته تعاملی برای فراخوانی توابع با دادههای آزمایشی ارائه میدهد. این پوسته از همه انواع تریگر (trigger) پشتیبانی میکند.
تنظیم اعتبارنامههای مدیر (اختیاری)
اگر میخواهید تستهای توابع شما از طریق Firebase Admin SDK با APIهای گوگل یا سایر APIهای فایربیس تعامل داشته باشند، ممکن است لازم باشد اعتبارنامههای ادمین را تنظیم کنید.
- تریگرهای Cloud Firestore و Realtime Database از قبل اعتبارنامههای کافی دارند و نیازی به تنظیمات اضافی ندارند .
- تمام APIهای دیگر، از جمله APIهای Firebase مانند Authentication و FCM یا APIهای Google مانند Cloud Translation یا Cloud Speech، به مراحل راهاندازی شرح داده شده در این بخش نیاز دارند. این موضوع چه از پوسته Cloud Functions و چه
firebase emulators:start
استفاده کنید، صدق میکند.
برای تنظیم اعتبارنامههای مدیر برای توابع شبیهسازی شده:
- پنل حسابهای سرویس (Service Accounts) کنسول Google Cloud را باز کنید.
- مطمئن شوید که حساب سرویس پیشفرض App Engine انتخاب شده است و از منوی گزینهها در سمت راست برای انتخاب Create key استفاده کنید.
- وقتی از شما خواسته شد، نوع کلید را JSON انتخاب کنید و روی Create کلیک کنید.
اعتبارنامههای پیشفرض گوگل خود را طوری تنظیم کنید که به کلید دانلود شده اشاره کنند:
یونیکس
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 APIs دسترسی داشته باشند. برای مثال، هنگام تست یک تریگر Authentication ، تابع شبیهسازی شده میتواند admin.auth().getUserByEmail(email)
را فراخوانی کند.
ارائه توابع با استفاده از پوسته توابع ابری
پوسته توابع ابری (Cloud Functions shell) انواع محرکهای تابع را با یک پوسته تعاملی برای فراخوانی توابع با دادههای آزمایشی شبیهسازی میکند. گزینهها بر اساس نوع تابع متفاوت هستند، اما قالب استفاده اولیه به شرح زیر است:
myFunctionName(data, options)
پارامتر data
برای triggerهای 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
فراخوانی توابع 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 Callable به صورت محلی، باید دادههای آزمایشی مناسبی را ارائه دهید.
# 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 به صورت محلی، باید دادههای آزمایشی مناسبی را ارائه دهید. این به طور کلی به معنای ارائه دادههای آزمایشی جدید برای عملیات 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}})
به طور پیشفرض، پوسته (shell) توابع پایگاه داده بلادرنگ (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’} })
علاوه بر فیلدهای before/after
از شیء data
، میتوانید از فیلدهای params
در شیء options
برای تقلید از کاراکترهای جایگزین (wildcards) در نام سند استفاده کنید:
# 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'}})
فراخوانی توابع تحلیلی
شما میتوانید با اجرای 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
فقط فیلدهایی را که کد شما به آنها وابسته است مشخص کنید، یا اگر فقط میخواهید تابع اجرا شود، اصلاً هیچ فیلدی را مشخص نکنید.