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

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

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

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

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

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

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

ערכות SDK ל-Android, לפלטפורמות של אפל ולאינטרנט

כדי לקיים אינטראקציה עם 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")
Unity
// Connects to the RTDB Emulator running on port 9000.
// Note: You may need to append your namespace: "?ns=YOUR_PROJECT_ID"
FirebaseDatabase database = FirebaseDatabase.GetInstance("http://127.0.0.1:9000");

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 שמופעלות על ידי אירועים של מסד נתונים בזמן אמת באמצעות האמולטור. כשמפעילים את האמולטורים של מסד נתונים בזמן אמת ו-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 יתחבר לאמולטור משותף שפועל בסביבה אחרת, תצטרכו לציין את מזהה הפרויקט שהגדרתם באמצעות 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 מאפשרים לייצא נתונים ממכונה פעילה של אמולטור. מגדירים קבוצת נתונים בסיסית לשימוש בבדיקות יחידה או בתהליכי עבודה של אינטגרציה רציפה (CI), ואז מייצאים אותה כדי לשתף אותה עם הצוות.

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>

מה הלאה?