הרצת פונקציות באופן מקומי

‫Firebase CLI כולל אמולטור של Cloud Functions שיכול לדמות את סוגי הפונקציות הבאים:

  • פונקציות HTTPS
  • פונקציות שניתן להפעיל
  • פונקציות של תור משימות
  • פונקציות ברקע שמופעלות מ-Firebase Authentication, מ-Realtime Database, מ-Cloud Firestore, מ-Cloud Storage, מהתראות Firebase נתמכות ומ-Cloud Pub/Sub.

אתם יכולים להריץ פונקציות באופן מקומי כדי לבדוק אותן לפני הפריסה בסביבת הייצור.

התקנת Firebase CLI

כדי להשתמש באמולטור של Cloud Functions, קודם צריך להתקין את Firebase CLI:

npm install -g firebase-tools

כדי להשתמש באמולטור המקומי, ה-Cloud Functions צריך להיות תלוי ב:

  • firebase-admin מגרסה 8.0.0 ואילך.
  • firebase-functions מגרסה 3.0.0 ואילך.

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

אם אתם רוצים שבדיקות הפונקציות יתקשרו עם ממשקי 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.

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

  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 emulators:start
    

    Windows

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

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

הגדרת פונקציות (אופציונלי)

אם אתם משתמשים במשתני הגדרה של פונקציות בהתאמה אישית, קודם צריך להריץ את הפקודה כדי לקבל את ההגדרה בהתאמה אישית (מריצים את הפקודה בתוך הספרייה functions) בסביבה המקומית:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

הפעלת חבילת הכלים לאמולטור

כדי להפעיל את האמולטור של Cloud Functions, משתמשים בפקודה emulators:start:

firebase emulators:start

הפקודה emulators:start תפעיל אמולטורים ל-Cloud Functions, ל-Cloud Firestore, למסד נתונים בזמן אמת ול"אירוח ב-Firebase" על סמך המוצרים שהפעלתם בפרויקט המקומי באמצעות firebase init. אם רוצים להפעיל אמולטור מסוים, משתמשים בדגל --only:

firebase emulators:start --only functions

אם רוצים להריץ חבילת מקרים לבדיקה או סקריפט בדיקה אחרי שהאמולטורים הופעלו, משתמשים בפקודה emulators:exec:

firebase emulators:exec "./my-test.sh"

אחרי ההפעלה, האמולטור מעביר בסטרימינג את היומנים מהפונקציות לחלון הטרמינל שבו הוא פועל. הוא מציג את כל הפלט מההצהרות console.log(),‏ console.info(),‏ console.error() ו-console.warn() בתוך הפונקציות.

שימו לב שהפלט של האמולטור מדמה פריסה של פונקציות כברירת מחדל באזור ספציפי (us-central1), שלא בהכרח תואם לאזור ברירת המחדל של הפריסה בפועל בסביבת הייצור. מידע נוסף על אזורים זמין במאמר מיקומים ב-Cloud Functions.

הגדרת האפליקציה כך שתתקשר עם האמולטורים

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

הוספת פונקציות שניתנות לקריאה לאפליקציה

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

Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val functions = Firebase.functions
functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFunctions functions = FirebaseFunctions.getInstance();
functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useEmulator(withHost: "localhost", port: 5001)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance;
// Connects to the Functions Emulator running on port 5001
functions.UseFunctionsEmulator("http://127.0.0.1:5001");

Web

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "127.0.0.1", 5001);

Web

firebase.functions().useEmulator("127.0.0.1", 5001);

הוספת כלים לאפליקציה כדי לדמות פונקציות HTTPS

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

http://$HOST:$PORT/$PROJECT/$REGION/$NAME

לדוגמה, פונקציית helloWorld פשוטה עם יציאת המארח והאזור שמוגדרים כברירת מחדל תוגש בכתובת:

https://localhost:5001/$PROJECT/us-central1/helloWorld

הוספת כלים לאפליקציה כדי לדמות פונקציות של תור משימות

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

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

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

האמולטור של Cloud Functions תומך בפונקציות שמופעלות ברקע מהמקורות הבאים:

  • אמולטור Realtime Database
  • אמולטור Cloud Firestore
  • אמולטור Authentication
  • אמולטור Pub/Sub
  • אמולטור ההתראות של Firebase

כדי להפעיל אירועים ברקע, משנים את המשאבים בקצה העורפי באמצעות Emulator Suite UI, או מחברים את האפליקציה או את קוד הבדיקה לאמולטורים באמצעות ה-SDK של הפלטפורמה.

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

בפונקציות שאתם מטמיעים כדי לטפל באירועים בהתאמה אישית של Firebase Extensions באמצעות Cloud Functions v2, האמולטור של Cloud Functions משתלב עם האמולטור של Eventarc כדי לתמוך בטריגרים של Eventarc.

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

אם האמולטור של Eventarc פועל, סביבת זמן הריצה של Cloud Functions מגדירה את משתנה הסביבה EVENTARC_EMULATOR ל-localhost:9299 בתהליך הנוכחי. ה-Firebase Admin SDKs מתחברים באופן אוטומטי לאמולטור של Eventarc כשמשתנה הסביבה EVENTARC_EMULATOR מוגדר. אפשר לשנות את יציאת ברירת המחדל, כפי שמוסבר בקטע הגדרת Local Emulator Suite.

כאשר משתני הסביבה מוגדרים כראוי, ה-Firebase Admin SDK שולח אירועים באופן אוטומטי לאמולטור Eventarc. בתורו, האמולטור של Eventarc מבצע קריאה חוזרת לאמולטור של Cloud Functions כדי להפעיל את כל ה-handlers הרשומים.

אפשר לבדוק את יומני הפונקציות בEmulator Suite UI כדי לקבל פרטים על הפעלת ה-handler.

אינטראקציות עם שירותים אחרים

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

Cloud Firestore

אם יש לכם פונקציות שמשתמשות ב-SDK של Firebase לאדמינים כדי לכתוב ב-Cloud Firestore, פעולות הכתיבה האלה יישלחו לאמולטור של Cloud Firestore אם הוא פועל. אם פעולות הכתיבה האלה מפעילות פונקציות נוספות, הן יופעלו באמולטור Cloud Functions.

Cloud Storage

אם יש לכם פונקציות שמשתמשות ב-SDK של Firebase לאדמינים (גרסה 9.7.0 ואילך) כדי לכתוב ב-Cloud Storage, פעולות הכתיבה האלה יישלחו לאמולטור של Cloud Storage אם הוא פועל. אם פעולות הכתיבה האלה מפעילות פונקציות נוספות, הן יופעלו באמולטור Cloud Functions.

Firebase Authentication

אם יש לכם פונקציות שמשתמשות ב-SDK של Firebase לאדמינים (גרסה 9.3.0 ואילך) כדי לכתוב אל Firebase Authentication, פעולות הכתיבה האלה יישלחו לאמולטור של Auth אם הוא פועל. אם פעולות הכתיבה האלה מפעילות פונקציות נוספות, הן יופעלו באמולטור Cloud Functions.

אירוח ב-Firebase

אם אתם משתמשים ב-Cloud Functions כדי ליצור תוכן דינמי ל-Firebase Hosting, פונקציות ה-HTTP המקומיות משמשות את firebase emulators:start כשרתי proxy לאירוח.

התראות של Firebase

בכל פרויקט שכולל לפחות טריגר אחד נתמך של התראות Firebase, ממשק המשתמש של האמולטור כולל את הכרטיסייה FireAlerts. כדי לדמות טריגר של התראה:

  1. פותחים את הכרטיסייה FireAlerts. בכרטיסייה הזו מוצג תפריט נפתח עם סוגי ההתראות שיש להם טריגרים משויכים (לדוגמה, אם יש לכם טריגר onNewFatalIssuePublished, אז מוצג crashlytics.newFatalIssue).
  2. בוחרים סוג התראה. הטופס מתמלא באופן אוטומטי בערכי ברירת מחדל, שאפשר לערוך. אתם יכולים לערוך את השדות של האירוע (מידע אחר מאירוע ההתראה הוא מידע שנובע מהאירוע, ערכים מדומים או ערכים שנוצרו באופן אקראי).
  3. בוחרים באפשרות Send Alert כדי לשלוח התראה סינתטית לאמולטור הפונקציות. הרישום ביומן זמין בקטע Alerts במסוף Firebase (וגם ביומנים).

השלבים הבאים

במדריך למתחילים בנושא בדיקות מופיעה דוגמה מלאה לשימוש בחבילת הכלים לאמולטור של Firebase.