חיבור האפליקציה לאמולטור של Realtime Database

לפני שמקשרים את האפליקציה לאמולטור 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 או מדריכים אחרים.

מזהי פרויקטים של פרויקטים לדוגמה מתחילים בקידומת demo-.

כשעובדים עם הדגמות של פרויקטים ב-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>

מה הלאה?