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

לפני שמחברים את האפליקציה למהדמ של Realtime Database, חשוב לוודא שמבינים את תהליך העבודה הכללי של 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 ואין משאבים פעילים. בדרך כלל ניגשים לפרויקטים האלה דרך הדרכות של Codelab או מדריכים אחרים.

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

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

SDK של Node.js Admin
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>

מה הלאה?