Check out what’s new from Firebase at Google I/O 2022. Learn more

חבר את האפליקציה שלך לאמולטור Cloud Firestore

לפני חיבור האפליקציה שלך לאמולטור Cloud Firestore, ודא שאתה מבין את זרימת העבודה הכוללת של Firebase Local Emulator Suite , ושאתה מתקין ומגדיר את Local Emulator Suite וסוקר את פקודות ה-CLI שלה.

בחר פרויקט Firebase

Firebase Local Emulator Suite מחקה מוצרים עבור פרויקט Firebase יחיד.

כדי לבחור את הפרויקט לשימוש, לפני שתפעיל את האמולטורים, ב-CLI הפעל את firebase use בספריית העבודה שלך. לחלופין, אתה יכול להעביר את דגל --project לכל פקודת אמולטור.

Local Emulator Suite תומכת באמולציה של פרויקטים אמיתיים של Firebase ופרויקטי הדגמה .

סוג פרויקט מאפיינים השתמש עם אמולטורים
אמיתי

פרויקט Firebase אמיתי הוא פרויקט שיצרת והגדרת (ככל הנראה דרך מסוף Firebase).

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

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

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

הַדגָמָה

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

מזהי פרויקטים עבור פרויקטי הדגמה כוללים את demo- הדגמה.

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

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

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

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

פלטפורמות אנדרואיד, אפל וערכות פיתוח אינטרנט

הגדר את התצורה בתוך האפליקציה או שיעורי בדיקה לאינטראקציה עם Cloud Firestore באופן הבא.

דְמוּי אָדָם
        // 10.0.2.2 is the special IP address to connect to the 'localhost' of
        // the host computer from an Android emulator.
        FirebaseFirestore firestore = FirebaseFirestore.getInstance();
        firestore.useEmulator("10.0.2.2", 8080);

        FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
                .setPersistenceEnabled(false)
                .build();
        firestore.setFirestoreSettings(settings);
מָהִיר
let settings = Firestore.firestore().settings
settings.host = "localhost:8080"
settings.isPersistenceEnabled = false 
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Web version 9

import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, 'localhost', 8080);

Web version 8

// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 8080);
}

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

ערכות SDK של מנהל מערכת

ערכות ה-SDK של Firebase Admin מתחברים אוטומטית לאמולטור Cloud Firestore כאשר משתנה הסביבה FIRESTORE_EMULATOR_HOST מוגדר:

export FIRESTORE_EMULATOR_HOST="localhost:8080"

אם הקוד שלך פועל בתוך אמולטור Cloud Functions מזהה הפרויקט שלך ותצורה אחרת יוגדרו אוטומטית בעת קריאת initalizeApp .

אם אתה רוצה שקוד Admin SDK שלך יתחבר לאמולטור משותף הפועל בסביבה אחרת, תצטרך לציין את אותו מזהה פרויקט שהגדרת באמצעות Firebase CLI . אתה יכול להעביר מזהה פרויקט כדי initializeApp את האפליקציה ישירות או להגדיר את משתנה הסביבה GCLOUD_PROJECT .

Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
משתנה הסביבה
export GCLOUD_PROJECT="your-project-id"

נקה את מסד הנתונים שלך בין בדיקות

Production Firestore לא מספקת שיטת SDK של פלטפורמה לשטיפת מסד הנתונים, אבל האמולטור של Firestore נותן לך נקודת קצה REST במיוחד למטרה זו, שניתן לקרוא לה משלב הגדרת מסגרת בדיקה/הורדה, ממחלקת בדיקה, או מהמעטפת (למשל , עם curl ) לפני תחילת מבחן. אתה יכול להשתמש בגישה זו כחלופה לכיבוי פשוט של תהליך האמולטור.

בשיטה מתאימה, בצע פעולת HTTP DELETE, וספק את מזהה הפרויקט שלך ב-Firebase, למשל firestore-emulator-example , לנקודת הקצה הבאה:

"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

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

אתה יכול לבצע את הפעולה הזו מהמעטפת:

// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

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

ייבוא ​​וייצוא נתונים

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

firebase emulators:export ./dir

בבדיקות, בעת הפעלת האמולטור, ייבא את נתוני הבסיס.

firebase emulators:start --import=./dir

אתה יכול להורות לאמולטור לייצא נתונים בעת הכיבוי, או לציין נתיב ייצוא או פשוט להשתמש בנתיב המועבר לדגל --import .

firebase emulators:start --import=./dir --export-on-exit

אפשרויות ייבוא ​​וייצוא נתונים אלה פועלות גם עם הפקודה firebase emulators:exec . למידע נוסף, עיין בהפניה לפקודת האמולטור .

דמיין את פעילות כללי האבטחה

בזמן שאתה עובד על אב טיפוס ולולאות בדיקה, אתה יכול להשתמש בכלי הדמיה ודוחות המסופקים על ידי Local Emulator Suite.

השתמש בצג הבקשות

אמולטור Cloud Firestore מאפשר לך לדמיין בקשות לקוח בממשק המשתמש של Emulator Suite, כולל מעקב אחר הערכה עבור כללי האבטחה של Firebase.

פתח את הכרטיסייה Firestore > בקשות כדי להציג את רצף ההערכה המפורט עבור כל בקשה.

Firestore Emulator Requests Monitor המציג הערכות כללי אבטחה

הדמיית דוחות הערכות כללים

כאשר אתה מוסיף כללי אבטחה לאב הטיפוס שלך, אתה יכול לנפות אותם עם כלי ניפוי באגים של Local Emulator Suite.

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

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

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

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

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage

כאן, גרסת ה-HTML של הדוח מדגישה הערכות שגורמות שגיאות לא מוגדרות וערך אפס:

כיצד אמולטור Cloud Firestore שונה מהייצור

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

עסקאות

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

אינדקסים

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

גבולות

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

מה הלאה?