המעטפת של 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
תקף רק לפונקציות של מסד נתונים בזמן אמת ו-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
מציינים רק את השדות שהקוד תלוי בהם, או לא מציינים אף שדה אם רוצים רק להריץ את הפונקציה.