לפני שמקשרים את האפליקציה לאמולטור Realtime Database, חשוב לוודא שמבינים את תהליך העבודה הכולל של Firebase Local Emulator Suite, שהתקנתם והגדרתם את Local Emulator Suite ושבדקתם את פקודות ה-CLI שלו.
בחירת פרויקט ב-Firebase
Firebase Local Emulator Suite מדמה מוצרים לפרויקט Firebase יחיד.
כדי לבחור את הפרויקט שבו רוצים להשתמש, לפני שמפעילים את האמולטורים, מריצים את הפקודה firebase use
בספריית העבודה. אפשר גם להעביר את הדגל --project
לכל פקודת אמולטור.
Local Emulator Suite תומך באמולציה של פרויקטים אמיתיים ב-Firebase ושל פרויקטים לדוגמה.
סוג הפרויקט | תכונות | שימוש באמולטורים |
---|---|---|
Real |
פרויקט Firebase אמיתי הוא פרויקט שיצרתם והגדרתם (לרוב דרך Firebaseהמסוף). בפרויקטים אמיתיים יש משאבים פעילים, כמו מופעים של מסדי נתונים, קטגוריות אחסון, פונקציות או כל משאב אחר שהגדרתם לפרויקט הזה ב-Firebase. |
כשעובדים עם פרויקטים אמיתיים ב-Firebase, אפשר להפעיל אמולטורים לכל המוצרים הנתמכים או לחלק מהם. לגבי כל המוצרים שאתם לא מדמים, האפליקציות והקוד שלכם יפעלו באינטראקציה עם משאב פעיל (מופע של מסד נתונים, קטגוריית אחסון, פונקציה וכו'). |
הדגמה |
לפרויקט הדגמה ב-Firebase אין הגדרה אמיתית של Firebase ואין לו משאבים פעילים. בדרך כלל ניגשים לפרויקטים האלה באמצעות הדרכות של Codelab או מדריכים אחרים. מזהי פרויקטים של פרויקטים לדוגמה מתחילים בקידומת |
כשעובדים עם הדגמות של פרויקטים ב-Firebase, האפליקציות והקוד מקיימים אינטראקציה רק עם אמולטורים. אם האפליקציה מנסה ליצור אינטראקציה עם משאב שלא מופעל בו אמולטור, הקוד ייכשל. |
מומלץ להשתמש בפרויקטים לדוגמה ככל האפשר. ההטבות כוללות:
- ההגדרה קלה יותר, כי אפשר להריץ את האמולטורים בלי ליצור פרויקט Firebase
- רמת בטיחות גבוהה יותר, כי אם הקוד שלכם מפעיל בטעות משאבים שלא מבוססים על אמולציה (משאבי ייצור), אין סיכוי לשינוי נתונים, לשימוש ולחיוב
- תמיכה טובה יותר במצב אופליין, כי אין צורך לגשת לאינטרנט כדי להוריד את הגדרות ה-SDK.
הגדרת האפליקציה לתקשורת עם האמולטורים
SDK ל-Android, לפלטפורמות של Apple ולאינטרנט
מגדירים את ההגדרה בתוך האפליקציה או את מחלקות הבדיקה כדי ליצור אינטראקציה עם Realtime Database באופן הבא.
Kotlin
// 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 SDKs מתחברים אוטומטית לאמולטור Realtime Database כשמשתנה הסביבה FIREBASE_DATABASE_EMULATOR_HOST
מוגדר:
export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"
אם הקוד שלכם פועל בתוך האמולטור Cloud Functions, מזהה הפרויקט וההגדרות האחרות יוגדרו אוטומטית כשקוראים ל-initializeApp
.
אם רוצים שהקוד Admin SDK יתחבר לאמולטור משותף שפועל בסביבה אחרת, צריך לציין את אותו מזהה פרויקט שהגדרתם באמצעות Firebase CLI.
אפשר להעביר מזהה פרויקט ישירות אל initializeApp
או להגדיר את משתנה הסביבה GCLOUD_PROJECT
.
Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
משתנה סביבה
export GCLOUD_PROJECT="your-project-id"
ניקוי מסד הנתונים בין בדיקות
כדי לנקות את Realtime Database בין פעילויות, אפשר למחוק את ההפניה למסד הנתונים. אתם יכולים להשתמש בגישה הזו כחלופה לסגירה פשוטה של תהליך האמולטור.
Kotlin
// 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.
אחרי שמריצים סדרה של בדיקות, אפשר לגשת לדוחות כיסוי הבדיקות שבהם מוצגות תוצאות ההערכה של כל אחד מהכללים. כדי לקבל את הדוחות, צריך לשלוח שאילתה לנקודת קצה (endpoint) חשופה באמולטור בזמן שהוא פועל. כדי להשתמש בגרסה שמתאימה לדפדפן, משתמשים בכתובת ה-URL הבאה:
http://localhost:9000/.inspect/coverage?ns=<database_name>
הכללים מחולקים לביטויים ולביטויי משנה, ואפשר להעביר את העכבר מעליהם כדי לקבל מידע נוסף, כולל מספר ההפעלות והערכים שמוחזרים. כדי לכלול בשאילתה את גרסת ה-JSON הגולמית של הנתונים האלה, צריך להוסיף את כתובת ה-URL הבאה:
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
מה הלאה?
- כדי לראות אוסף של סרטונים ודוגמאות מפורטות, אפשר לעיין בפלייליסט ההדרכה בנושא Firebase Emulators.
- כדי לחקור תרחישי שימוש מתקדמים שכוללים בדיקה של כללי אבטחה ושל Firebase Test SDK: בדיקת כללי אבטחה (מסד נתונים בזמן אמת).
- מכיוון שפונקציות מופעלות הן שילוב אופייני עם Realtime Database, כדאי לקרוא מידע נוסף על אמולטור Cloud Functions for Firebase במאמר הרצת פונקציות באופן מקומי.