בדיקה אינטראקטיבית של פונקציות

המעטפת של 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.

כדי להגדיר פרטי כניסה של אדמין לפונקציות מופעלות:

  1. פותחים את החלונית Service Accounts במסוף Google Cloud.
  2. מוודאים שהאפשרות App Engine default service account מסומנת, ומשתמשים בתפריט האפשרויות משמאל כדי לבחור Create key.
  3. כשמופיעה בקשה, בוחרים באפשרות JSON בתור סוג המפתח ולוחצים על Create.
  4. מגדירים את פרטי הכניסה שמוגדרים כברירת מחדל ל-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);

הפעלת פונקציות אחסון ואימות

בפונקציות של אחסון ואימות, מפעילים את הפונקציה המקומית עם נתוני הבדיקה שרוצים לראות בתוך הפונקציה. נתוני הבדיקה צריכים להיות תואמים לפורמטים המתאימים:

מציינים רק את השדות שהקוד תלוי בהם, או לא מציינים אף שדה אם רוצים רק להריץ את הפונקציה.