לפני שמחברים את האפליקציה למהדמ של Realtime Database, חשוב לוודא שמבינים את תהליך העבודה הכללי של Firebase Local Emulator Suite, ומתקינים ומגדירים את Local Emulator Suite ובודקים את פקודות ה-CLI שלו.
בחירת פרויקט ב-Firebase
ה-Firebase Local Emulator Suite מאפשר לדמות מוצרים לפרויקט Firebase יחיד.
כדי לבחור את הפרויקט שבו רוצים להשתמש, לפני שמפעילים את הסימולטורים, מריצים את הפקודה firebase use
בספריית העבודה ב-CLI. לחלופין, אפשר להעביר את הדגל --project
לכל הפקודות של המהדר.
Local Emulator Suite תומך בהדמיה של פרויקטים אמיתיים ופרויקטים דמוניים ב-Firebase.
סוג הפרויקט | תכונות | שימוש באמולטורים |
---|---|---|
ממשי |
פרויקט Firebase אמיתי הוא פרויקט שיצרתם והגדרתם (סביר להניח באמצעות מסוף Firebase). בפרויקטים אמיתיים יש משאבים פעילים, כמו מכונות של מסדי נתונים, קטגוריות אחסון, פונקציות או כל משאב אחר שהגדרתם לפרויקט הזה ב-Firebase. |
כשעובדים עם פרויקטים אמיתיים ב-Firebase, אפשר להריץ אמוללטורים לכל המוצרים הנתמכים או לחלק מהם. לגבי מוצרים שלא מעתיקים, האפליקציות והקוד יתקשרו עם המשאב הפעיל (מכונה של מסד נתונים, קטגוריה של אחסון, פונקציה וכו'). |
הדגמה |
בפרויקט הדגמה ב-Firebase אין הגדרות אמיתיות של Firebase ואין משאבים פעילים. בדרך כלל ניגשים לפרויקטים האלה דרך הדרכות של Codelab או מדריכים אחרים. מזהי פרויקטים של פרויקטים לדוגמה כוללים את הקידומת |
כשעובדים עם פרויקטים לדוגמה ב-Firebase, האפליקציות והקוד שלכם מקיימים אינטראקציה עם אמוללטורים בלבד. אם האפליקציה תנסה לקיים אינטראקציה עם משאב שאין לו מכונה וירטואלית שפועלת, הקוד הזה ייכשל. |
מומלץ להשתמש בפרויקטים לדוגמה כשהדבר אפשרי. ההטבות כוללות:
- הגדרה קלה יותר, כי אפשר להריץ את הסימולטורים בלי ליצור פרויקט Firebase
- אבטחה חזקה יותר, כי אם הקוד מפעיל בטעות משאבים לא ממולאמים (בפרודקשן), אין סיכוי לשינוי נתונים, שימוש בחיוב
- תמיכה טובה יותר במצב אופליין, כי אין צורך לגשת לאינטרנט כדי להוריד את הגדרות ה-SDK.
הוספת רכיבים לאפליקציה כדי שתוכל לתקשר עם הסימולטורים
Android, פלטפורמות של Apple ו-SDK לאינטרנט
מגדירים את ההגדרות או את כיתות הבדיקה באפליקציה כך שיתקשרו עם Realtime Database באופן הבא.
Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val database = Firebase.database database.useEmulator("10.0.2.2", 9000)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseDatabase database = FirebaseDatabase.getInstance(); database.useEmulator("10.0.2.2", 9000);
Swift
// In almost all cases the ns (namespace) is your project ID. let db = Database.database(url:"http://127.0.0.1:9000?ns=YOUR_DATABASE_NAMESPACE")
Web
import { getDatabase, connectDatabaseEmulator } from "firebase/database"; const db = getDatabase(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. connectDatabaseEmulator(db, "127.0.0.1", 9000); }
Web
var db = firebase.database(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. db.useEmulator("127.0.0.1", 9000); }
לא נדרשת הגדרה נוספת כדי לבדוק פונקציות של Cloud Functions שמופעלות על ידי אירועים ב-Realtime Database באמצעות הסימולטור. כשהמעבדים של Realtime Database ו-Cloud Functions פועלים, הם פועלים יחד באופן אוטומטי.
Admin SDK שניות
מכונות ה-Firebase Admin SDK מתחברות באופן אוטומטי למהדר Realtime Database כשמשתנה הסביבה FIREBASE_DATABASE_EMULATOR_HOST
מוגדר:
export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"
אם הקוד פועל בתוך המהדר של Cloud Functions, מזהה הפרויקט והגדרות אחרות יוגדרו באופן אוטומטי בזמן הקריאה ל-initializeApp
.
אם רוצים שהקוד Admin SDK יתחבר למהדרן משותף שפועל בסביבה אחרת, צריך לציין את אותו מזהה פרויקט שהגדרתם באמצעות CLI של Firebase.
אפשר להעביר מזהה פרויקט ישירות אל initializeApp
או להגדיר את משתנה הסביבה GCLOUD_PROJECT
.
Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
משתנה סביבה
export GCLOUD_PROJECT="your-project-id"
ניקוי מסד הנתונים בין בדיקות
כדי לנקות את Realtime Database בין פעילויות, אפשר למחוק את ההפניה למסד הנתונים. אפשר להשתמש בגישה הזו כחלופה לסגירה פשוטה של תהליך הסימולטור.
Kotlin+KTX
// With a DatabaseReference, write null to clear the database. database.reference.setValue(null)
Java
// With a DatabaseReference, write null to clear the database. database.getReference().setValue(null);
Swift
// With a DatabaseReference, write nil to clear the database. Database.database().reference().setValue(nil);
Web
import { getDatabase, ref, set } from "firebase/database"; // With a database Reference, write null to clear the database. const db = getDatabase(); set(ref(db), null);
Web
// With a database Reference, write null to clear the database. firebase.database().ref().set(null);
כמובן, הקוד צריך להמתין לאישור שהאחזור הסתיים או נכשל באמצעות תכונות הטיפול האסינכרוני באירועים בפלטפורמה.
אחרי שמטמיעים שלב כזה, אפשר לתזמן את הבדיקות ולהפעיל את הפונקציות בידיעה שהנתונים הישנים יימחקו בין ההפעלות, ושאתם משתמשים בהגדרת בדיקה בסיסית חדשה.
ייבוא וייצוא של נתונים
מסדי הנתונים והמעבדים של Cloud Storage for Firebase מאפשרים לייצא נתונים ממכונת אמולטור שפועלת. מגדירים קבוצת נתונים בסיסית לשימוש בבדיקות היחידה או בתהליכי העבודה של השילוב המתמשך, ולאחר מכן מייצאים אותה כדי לשתף אותה עם הצוות.
firebase emulators:export ./dir
בבדיקות, בזמן ההפעלה של הסימולטור, מייבאים את נתוני הבסיס.
firebase emulators:start --import=./dir
אפשר להורות למהדר להוציא נתונים בזמן סגירה, על ידי ציון נתיב הייצוא או פשוט על ידי שימוש בנתיב שמוענק לדגל --import
.
firebase emulators:start --import=./dir --export-on-exit
אפשרויות הייבוא והייצוא של הנתונים האלה פועלות גם עם הפקודה firebase emulators:exec
. מידע נוסף זמין במאמר העזרה בנושא פקודות של המהדר.
הצגה חזותית של הפעילות של כללי האבטחה
כשאתם עובדים על אב טיפוס ועל לולאות בדיקה, אתם יכולים להשתמש בכלים להצגה חזותית ובדוחות שסופקו על ידי Local Emulator Suite.
הצגה חזותית של הערכות הכללים
כשאתם מוסיפים כללי אבטחה לאב טיפוס, אתם יכולים לנפות באגים בכלים של Local Emulator Suite.
אחרי שמריצים חבילת בדיקות, אפשר לגשת לדוחות כיסוי הבדיקה שבהם מוצגת הערכה של כל אחד מהכללים. כדי לקבל את הדוחות, שולחים שאילתה לנקודת קצה חשופה במהלך ההפעלה של הסימולטור. כדי לקבל גרסה שמתאימה לדפדפנים, צריך להשתמש בכתובת ה-URL הבאה:
http://localhost:9000/.inspect/coverage?ns=<database_name>
הפעולה הזו מפרידה את הכללים לביטויים ולביטויים משנה, שאפשר להעביר מעליהם את העכבר כדי לקבל מידע נוסף, כולל מספר ההפעלות והערכים שהוחזרו. כדי לקבל את גרסת ה-JSON הגולמי של הנתונים האלה, צריך לכלול את כתובת ה-URL הבאה בשאילתה:
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
מה הלאה?
- כדי לקבל קבוצה נבחרת של סרטונים ודוגמאות מפורטות לשימוש, אפשר לעיין בפלייליסט ההדרכה של מכונות הווירטואליות של Firebase.
- תרחישים מתקדמים לדוגמה שכוללים בדיקה של כללי אבטחה ו-Firebase Test SDK: בדיקת כללי אבטחה (מסד נתונים בזמן אמת).
- פונקציות מופעלות הן שילוב אופייני עם Realtime Database, לכן כדאי לקרוא מידע נוסף על המהדר של Cloud Functions for Firebase במאמר הרצת פונקציות באופן מקומי.