מעטפת Cloud Functions מספקת מעטפת אינטראקטיבית להפעלת פונקציות עם נתוני בדיקה. המעטפת תומכת בכל סוגי הטריגרים.
הגדרת פרטי כניסה של אדמין (אופציונלי)
אם אתם רוצים שבדיקות הפונקציות יתקשרו עם ממשקי Google API או ממשקי Firebase API אחרים דרך ה-SDK של Firebase לאדמינים, יכול להיות שתצטרכו להגדיר פרטי כניסה של אדמין.
- הטריגרים Cloud Firestore ו-Realtime Database כבר כוללים את פרטי הכניסה הנדרשים, ולא צריך להגדיר אותם.
- בכל ממשקי ה-API האחרים, כולל ממשקי Firebase API כמו Authentication ו-FCM או ממשקי Google API כמו 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 באמצעות SDK לאדמינים. לדוגמה, כשבודקים טריגר של Authentication, הפונקציה המדומה יכולה לקרוא ל-admin.auth().getUserByEmail(email).
הצגת פונקציות באמצעות מעטפת של Cloud Functions
מעטפת Cloud Functions מדמה את כל סוגי הטריגרים של הפונקציות באמצעות מעטפת אינטראקטיבית להפעלת הפונקציות עם נתוני בדיקה. האפשרויות משתנות בהתאם לסוג הפונקציה, אבל הפורמט הבסיסי לשימוש הוא:
myFunctionName(data, options)
הפרמטר data נדרש לטריגרים של מסד נתונים בזמן אמת, Cloud Firestore ו-PubSub, והוא אופציונלי לכל סוגי הפונקציות האחרים.
בנוסף, הפרמטר האופציונלי options תקף רק לפונקציות של מסד נתונים בזמן אמת ו-Cloud Firestore.
אם רוצים, אפשר לטעון נתוני בדיקה מקובץ מקומי. לשם כך, שומרים את הקובץ כמשתנה ומפעילים פונקציה באמצעותו:
var data = require('./path/to/testData.json');
myFunction(data);
התקנה והגדרה של מעטפת Cloud Functions
כדי להשתמש בתכונה הזו, צריך להשתמש בגרסה 3.11.0 ומעלה של firebase-tools ובגרסה 0.6.2 ומעלה של firebase-functions SDK. כדי לעדכן את שניהם, מריצים את הפקודות הבאות בספרייה 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
כשמפעילים פונקציות 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 לא זמינה כרגע.
הפעלת פונקציות של מסד נתונים בזמן אמת
כשמריצים פונקציות של מסד נתונים בזמן אמת באופן מקומי, צריך לספק נתוני בדיקה מתאימים. בדרך כלל זה אומר שצריך לספק נתוני בדיקה חדשים לפעולות 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 עם הרשאות אדמין, כלומר היא מדמה אירוע של יצירה, עדכון או מחיקה כאילו הוא בוצע על ידי משתמש עם הרשאת אדמין.
הפעלת פונקציות Pub/Sub
בפונקציות PubSub, צריך להוסיף את המטען הייעודי (payload) של ההודעה במופע של 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() ב-shell.
כדי להריץ את הפונקציה עם נתוני בדיקה, מומלץ להגדיר משתנה לשדות נתוני האירוע הספציפיים שהפונקציה צריכה:
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
ציינו רק את השדות שהקוד שלכם תלוי בהם, או אל תציינו שדות בכלל אם אתם רק רוצים להריץ את הפונקציה.