מעטפת Cloud Functions מספקת מעטפת אינטראקטיבית להפעלת פונקציות עם נתוני בדיקה. המעטפת תומכת בכל סוגי הטריגרים.
הגדרת פרטי כניסה לאדמין (אופציונלי)
אם רוצים שהבדיקות של הפונקציות יפעלו עם ממשקי API של Google או עם ממשקי API אחרים של Firebase דרך Firebase Admin SDK, יכול להיות שתצטרכו להגדיר פרטי כניסה של אדמין.
- לטריגרים Cloud Firestore ו-Realtime Database כבר יש מספיק פרטי כניסה, ולא נדרשת הגדרה נוספת.
- בכל ממשקי ה-API האחרים, כולל Firebase APIs כמו Authentication ו-FCM או Google APIs כמו Cloud Translation או Cloud Speech, צריך לבצע את שלבי ההגדרה שמתוארים בקטע הזה. ההגדרה הזו חלה גם אם משתמשים במעטפת Cloud Functions או ב-
firebase emulators:start
.
כדי להגדיר פרטי כניסה של אדמין לפונקציות מדומה:
- פותחים את החלונית Service Accounts במסוף Google Cloud.
- מוודאים שחשבון השירות שמוגדר כברירת מחדל App Engine נבחר, ומשתמשים בתפריט האפשרויות בצד שמאל כדי לבחור באפשרות יצירת מפתח.
- כשמופיעה בקשה, בוחרים באפשרות JSON בתור סוג המפתח ולוחצים על יצירה.
מגדירים את פרטי ברירת המחדל של 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 לפחות, וגרסת 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
לבסוף, מריצים את ה-shell באמצעות הפקודה הבאה:
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
כשמפעילים פונקציות שאפשר לקרוא להן באמצעות 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
מציינים רק את השדות שהקוד תלוי בהם, או לא מציינים שדות בכלל אם רוצים רק להריץ את הפונקציה.