מעטפת Cloud Functions מספקת מעטפת אינטראקטיבית להפעלת פונקציות עם נתוני בדיקה. המעטפת תומכת בכל סוגי הטריגרים.
הגדרת פרטי הכניסה של האדמין (אופציונלי)
אם אתם רוצים שבדיקות הפונקציות יתקשרו ל-Google APIs או ל-Firebase APIs אחרים דרך Firebase Admin SDK, יכול להיות שתצטרכו להגדיר פרטי כניסה של אדמין.
- לטריגרים Cloud Firestore ו-Realtime Database כבר יש פרטי כניסה מספיקים, והם לא דורשים הגדרה נוספת.
- כל ממשקי ה-API האחרים, כולל ממשקי Firebase כמו Authentication ו-FCM או ממשקי Google כמו Cloud Translation או Cloud Speech, דורשים את שלבי ההגדרה שמפורטים בקטע הזה. ההנחיה הזו רלוונטית גם אם משתמשים במעטפת Cloud Functions וגם אם משתמשים ב-
firebase emulators:start
.
כדי להגדיר פרטי כניסה של אדמין לפונקציות מופעלות:
- פותחים את החלונית Service Accounts במסוף Google Cloud.
- מוודאים שבחרתם באפשרות App Engine default service account, ובתפריט האפשרויות שבצד שמאל בוחרים באפשרות Create key.
- כשמופיעה בקשה, בוחרים באפשרות JSON בתור סוג המפתח ולוחצים על Create.
מגדירים את פרטי הכניסה שמוגדרים כברירת מחדל ב-Google כך שיצביעו על המפתח שהורדתם:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase functions:shell
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase functions:shell
אחרי ביצוע השלבים האלה, לבדיקות הפונקציות תהיה גישה ל-Firebase ול-Google APIs באמצעות Admin SDK. לדוגמה, כשבודקים טריגר Authentication, הפונקציה המדומה יכולה להפעיל את admin.auth().getUserByEmail(email)
.
הצגת פונקציות באמצעות מעטפת של Cloud Functions
מעטפת Cloud Functions מדמה את כל סוגי הטריגרים של הפונקציות באמצעות מעטפת אינטראקטיבית להפעלת הפונקציות עם נתוני בדיקה. האפשרויות משתנות בהתאם לסוג הפונקציה, אבל פורמט השימוש הבסיסי הוא:
myFunctionName(data, options)
הפרמטר data
נדרש לטריגרים של 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 לפחות, וגרסת ה-SDK של firebase-functions
צריכה להיות 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 במעטפת, השימוש זהה לשימוש במודול NPM request
, אבל צריך להחליף את 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
לא זמינה כרגע.
הפעלת פונקציות של 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’} })
בנוסף לשדות 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
מציינים רק את השדות שהקוד תלוי בהם, או לא מציינים אף שדה אם רוצים רק להריץ את הפונקציה.