پوسته توابع ابری یک پوسته تعاملی برای فراخوانی توابع با داده های آزمایشی فراهم می کند. پوسته از همه انواع ماشه پشتیبانی می کند.
تنظیم اعتبار مدیریت (اختیاری)
اگر میخواهید آزمایشهای عملکرد شما با Google API یا سایر APIهای Firebase از طریق Firebase Admin SDK تعامل داشته باشند، ممکن است لازم باشد اعتبارنامههای سرپرست را تنظیم کنید.
- راهاندازهای Cloud Firestore و Realtime Database از قبل دارای اعتبار کافی هستند و نیازی به تنظیمات اضافی ندارند .
- همه APIهای دیگر، از جمله APIهای Firebase مانند Authentication و FCM یا APIهای Google مانند Cloud Translation یا Cloud Speech، به مراحل راه اندازی توضیح داده شده در این بخش نیاز دارند. چه از پوسته Cloud Functions یا
firebase emulators:start
استفاده کنید، این امر صدق می کند.
برای تنظیم اعتبار مدیریت برای توابع شبیه سازی شده:
- صفحه حسابهای سرویس کنسول Google Cloud را باز کنید.
- مطمئن شوید که حساب سرویس پیشفرض App Engine انتخاب شده است و از منوی گزینهها در سمت راست برای انتخاب کلید ایجاد استفاده کنید.
- وقتی از شما خواسته شد، JSON را برای نوع کلید انتخاب کنید و روی ایجاد کلیک کنید.
اعتبار پیش فرض Google خود را طوری تنظیم کنید که به کلید دانلود شده اشاره کند:
یونیکس
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)
فراخوانی کند.
توابع را با استفاده از پوسته توابع ابری ارائه دهید
پوسته توابع ابری همه انواع محرک های تابع را با یک پوسته تعاملی برای فراخوانی توابع با داده های آزمایشی شبیه سازی می کند. گزینه ها بسته به نوع عملکرد متفاوت است، اما قالب اصلی استفاده به شرح زیر است:
myFunctionName(data, options)
پارامتر data
برای راهاندازهای Realtime Database، Cloud Firestore و PubSub و برای همه انواع عملکردهای دیگر اختیاری است. همچنین، پارامتر options
اختیاری فقط برای توابع پایگاه داده Realtime و 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 به صورت محلی، باید داده های آزمایشی مناسب را ارائه دهید. این به طور کلی به معنای ارائه داده های آزمایشی جدید برای عملیات 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
با اجرای 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
- برای Authentication :
UserRecord
فقط فیلدهایی را مشخص کنید که کد شما به آنها وابسته است یا اگر فقط می خواهید تابع را اجرا کنید، هیچ کدام را مشخص نکنید.