בדיקת פונקציות באופן אינטראקטיבי

מעטפת Cloud Functions מספקת מעטפת אינטראקטיבית להפעלת פונקציות עם נתוני בדיקה. המעטפת תומכת בכל סוגי הטריגרים.

הגדרת אישורי מנהל מערכת (אופציונלי)

אם אתה רוצה שבדיקות הפונקציות שלך יתקשרו עם ממשקי API של Google או ממשקי API אחרים של Firebase דרך Firebase Admin SDK , ייתכן שתצטרך להגדיר אישורי מנהל.

  • לטריגרים של Cloud Firestore ו- Realtime Database יש כבר אישורים מספיקים ואינם דורשים הגדרה נוספת.
  • כל שאר ממשקי ה-API, כולל ממשקי API של Firebase כגון Authentication ו-FCM או ממשקי API של Google כגון Cloud Translation או Cloud Speech, דורשים את שלבי ההגדרה המתוארים בסעיף זה. זה חל בין אם אתה משתמש במעטפת Cloud Functions או firebase emulators:start .

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

  1. פתח את חלונית חשבונות השירות של Google Cloud Console.
  2. ודא שחשבון שירות ברירת המחדל של App Engine נבחר, והשתמש בתפריט האפשרויות מימין כדי לבחור צור מפתח .
  3. כאשר תתבקש, בחר JSON עבור סוג המפתח, ולחץ על צור .
  4. הגדר את אישורי ברירת המחדל של Google כך שיצביעו על המפתח שהורד:

    יוניקס

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase functions:shell
    

    חלונות

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase functions:shell
    

לאחר השלמת השלבים האלה, מבחני הפונקציות שלך יכולים לגשת לממשקי Firebase ו-Google API באמצעות ה- Admin SDK . לדוגמה, בעת בדיקת טריגר של אימות, הפונקציה המדומה יכולה לקרוא admin.auth().getUserByEmail(email) .

שרת פונקציות באמצעות מעטפת Cloud Functions

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

myFunctionName(data, options)

פרמטר data נדרש עבור מפעילי מסד נתונים בזמן אמת, 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 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

לבסוף, הפעל את המעטפת עם הפקודה הבאה:

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 אינה זמינה כעת.

הפעל פונקציות של מסד נתונים בזמן אמת

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

הפעל את פונקציות 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:'bar'},
    // 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);

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

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

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