בעזרת Firebase Local Emulator Suite קל יותר לאמת באופן מלא את התכונות וההתנהגות של האפליקציה. הוא גם כלי נהדר לאימות ההגדרות של Firebase Security Rules. שימוש באמולטורים של Firebase להרצה של בדיקות יחידה (unit tests) בסביבה מקומית ולהפיכתן לאוטומטיות. תוכלו להיעזר בשיטות שמתוארות במסמך הזה כדי לפתח בדיקות יחידות של האפליקציה ולהפוך אותן לאוטומטיות שמאמתות את Rules.
אם עדיין לא עשיתם זאת, מגדירים את המהדמנים של Firebase.
לפני הפעלת האמולטור
לפני שמתחילים להשתמש באמולטור, חשוב לזכור את הדברים הבאים:
- בשלב הראשון, הסימולטור יטען את הכללים שצוינו בשדה
firestore.rules
או בשדה storage.rules בקובץfirebase.json
. אם הקובץ לא קיים ואתם לא משתמשים בשיטהloadFirestoreRules
או בשיטה loadStorageRules כפי שמתואר בהמשך, הסימולטור מתייחס לכל הפרויקטים כאילו יש להם כללים פתוחים. - רוב ערכות ה-SDK של Firebase פועלות ישירות עם הסימולטורים, אבל רק הספרייה
@firebase/rules-unit-testing
תומכת בהדמיה שלauth
בכללי האבטחה, וכך מאפשרת לבצע בדיקות יחידה בקלות רבה יותר. בנוסף, הספרייה תומכת בכמה תכונות ספציפיות למהדר, כמו ניקוי כל הנתונים, כפי שמפורט בהמשך. - האמולטורים יקבלו גם אסימוני אימות של Firebase בסביבת הייצור שסופקו דרך ערכות SDK של לקוחות, ויעריכו את הכללים בהתאם. כך תוכלו לקשר את האפליקציה ישירות לאמולטורים בבדיקות ידניות ובשילוב.
ההבדלים בין המהדמנים של מסדי הנתונים לבין סביבות הייצור
- אין צורך ליצור מכונה של מסד נתונים באופן מפורש. האמולטור ייצור באופן אוטומטי כל מכונה של מסד נתונים שניגשים אליה.
- כל מסד נתונים חדש מתחיל עם כללים סגורים, כך שמשתמשים שאינם אדמינים לא יוכלו לקרוא או לכתוב.
- כל מסד נתונים ממולא מחקה את המגבלות והמכסות של תוכנית Spark (במיוחד, כל מכונה מוגבלת ל-100 חיבורים בו-זמניים).
- כל מסד נתונים יקבל את המחרוזת
"owner"
כאסימון אימות של אדמין. - לאמולטורים אין כרגע אינטראקציות שפועלות עם מוצרים אחרים של Firebase. חשוב לציין שתהליך האימות הרגיל ב-Firebase לא פועל.
במקום זאת, אפשר להשתמש בשיטה
initializeTestApp()
בספרייהrules-unit-testing
, שמקבלת שדהauth
. אובייקט Firebase שנוצר באמצעות השיטה הזו מתנהג כאילו הוא אומת בהצלחה ככל ישות שתספקו. אם מעבירים את הערךnull
, הוא יתנהג כמשתמש לא מאומת (לדוגמה, כלליauth != null
יכשלו).
אינטראקציה עם אמולטור Realtime Database
אפשר לגשת למכונה של Realtime Database ב-Firebase בסביבת הייצור באמצעות תת-דומיין של firebaseio.com
, ול-API ל-REST באופן הבא:
https://<database_name>.firebaseio.com/path/to/my/data.json
הסימולטור פועל באופן מקומי וזמין בכתובת localhost:9000
. כדי לבצע פעולות במכונה ספציפית של מסד נתונים, צריך להשתמש בפרמטר השאילתה ns
כדי לציין את שם מסד הנתונים.
http://localhost:9000/path/to/my/data.json?ns=<database_name>
הרצת בדיקות יחידה מקומיות באמצעות גרסת ה-SDK של JavaScript בגרסה 9
Firebase מפיץ ספריית בדיקות יחידה של כללי אבטחה עם ערכת ה-SDK של JavaScript בגרסה 9 ועם ערכת ה-SDK בגרסה 8. ממשקי ה-API של הספריות שונים באופן משמעותי. מומלץ להשתמש בספריית הבדיקה בגרסה 9, שהיא יעילה יותר ומחייבת פחות הגדרות כדי להתחבר למהדמנים, וכך אפשר להימנע באופן בטוח משימוש בטעות במשאבי הייצור. לצורך תאימות לאחור, אנחנו ממשיכים להנגיש את ספריית הבדיקות של V8.
משתמשים במודול @firebase/rules-unit-testing
כדי ליצור אינטראקציה עם הסימולטור שפועל באופן מקומי. אם מקבלים זמנים קצובים לתפוגה או שגיאות ECONNREFUSED
, צריך לוודא שהאמולטור פועל.
מומלץ מאוד להשתמש בגרסה עדכנית של Node.js כדי שתוכלו להשתמש בסימון async/await
. כמעט כל ההתנהגות שרוצים לבדוק כוללת פונקציות אסינכרוניות, ומודול הבדיקה מיועד לעבוד עם קוד שמבוסס על Promise.
ספריית בדיקת היחידה של הכללים בגרסה 9 תמיד מודעת למהדמנים, והיא אף פעם לא נוגעת במשאבי הייצור שלכם.
אתם מייבאים את הספרייה באמצעות הצהרות ייבוא מודולריות ב-v9. לדוגמה:
import {
assertFails,
assertSucceeds,
initializeTestEnvironment
} from "@firebase/rules-unit-testing"
// Use `const { … } = require("@firebase/rules-unit-testing")` if imports are not supported
// Or we suggest `const testing = require("@firebase/rules-unit-testing")` if necessary.
לאחר הייבוא, כדי להטמיע בדיקות יחידה צריך:
- יצירת
RulesTestEnvironment
והגדרתו באמצעות קריאה ל-initializeTestEnvironment
. - הגדרת נתוני בדיקה בלי להפעיל את Rules, באמצעות שיטה נוחה שמאפשרת לעקוף אותם באופן זמני,
RulesTestEnvironment.withSecurityRulesDisabled
. - הגדרת חבילה של בדיקות וכל בדיקה בנפרד עם קוד לפני/אחרי (hook) עם קריאות לניקוי נתוני הבדיקה והסביבה, כמו
RulesTestEnvironment.cleanup()
אוRulesTestEnvironment.clearFirestore()
. - הטמעת תרחישי בדיקה שמחקים מצבי אימות באמצעות
RulesTestEnvironment.authenticatedContext
ו-RulesTestEnvironment.unauthenticatedContext
.
שיטות נפוצות ופונקציות שירות
ראו גם שיטות בדיקה ספציפיות לאמולטור באמצעות ה-API המודולרי.
initializeTestEnvironment() => RulesTestEnvironment
הפונקציה הזו מאתחלת סביבה לבדיקה של כללי יחידה. צריך להפעיל את הפונקציה הזו קודם כדי להגדיר את הבדיקה. כדי שההרצה תתבצע בהצלחה, צריך להפעיל את האמולטורים.
הפונקציה מקבלת אובייקט אופציונלי שמגדיר TestEnvironmentConfig
, שיכול לכלול מזהה פרויקט והגדרות תצורה של אמולטור.
let testEnv = await initializeTestEnvironment({ projectId: "demo-project-1234", firestore: { rules: fs.readFileSync("firestore.rules", "utf8"), }, });
RulesTestEnvironment.authenticatedContext({ user_id: string, tokenOptions?: TokenOptions }) => RulesTestContext
השיטה הזו יוצרת RulesTestContext
, שמתנהג כמו משתמש Authentication מאומת. לבקשות שנוצרות באמצעות ההקשר המוחזר יצורף טוקן Authentication מדומה. אפשר גם להעביר אובייקט שמגדיר הצהרות מותאמות אישית או ערכי-ברירת מחדל אחרים לעומסי נתונים של אסימונים מסוג Authentication.
אפשר להשתמש באובייקט ההקשר של הבדיקה שהוחזר בבדיקות כדי לגשת לכל מכונות האמולטור שהוגדרו, כולל אלה שהוגדרו באמצעות initializeTestEnvironment
.
// Assuming a Firestore app and the Firestore emulator for this example import { setDoc } from "firebase/firestore"; const alice = testEnv.authenticatedContext("alice", { … }); // Use the Firestore instance associated with this context await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });
RulesTestEnvironment.unauthenticatedContext() => RulesTestContext
השיטה הזו יוצרת RulesTestContext
, שמתנהג כמו לקוח שלא נכנס לחשבון דרך Authentication. לבקשות שנוצרו באמצעות ההקשר שמוחזר לא מצורפים אסימוני האימות של Firebase.
בבדיקות, משתמשים באובייקט ההקשר של הבדיקה שמוחזר כדי לגשת לכל המכונות של אמולטור שהוגדרו, כולל אלה שהוגדרו באמצעות initializeTestEnvironment
.
// Assuming a Cloud Storage app and the Storage emulator for this example import { getStorage, ref, deleteObject } from "firebase/storage"; const alice = testEnv.unauthenticatedContext(); // Use the Cloud Storage instance associated with this context const desertRef = ref(alice.storage(), 'images/desert.jpg'); await assertSucceeds(deleteObject(desertRef));
RulesTestEnvironment.withSecurityRulesDisabled()
מריצים פונקציית הגדרה לבדיקה עם הקשר שפועל כאילו כללי האבטחה הושבתו.
השיטה הזו משתמשת בפונקציית קריאה חוזרת, שמשתמשת בהקשר שעוקף את כללי האבטחה ומחזירה הבטחה. ההקשר ייהרס ברגע שההבטחה תיפתר או תידחה.
RulesTestEnvironment.cleanup()
ה-method הזה משמיד את כל RulesTestContexts
שנוצרו בסביבת הבדיקה ומנקים את המשאבים הבסיסיים, מה שמאפשר יציאה נקייה.
השיטה הזו לא משנה את המצב של המהדמנים בשום צורה. כדי לאפס את הנתונים בין בדיקות, משתמשים בשיטה לניקוי נתונים ספציפית לאמולטור של האפליקציה.
assertSucceeds(pr: Promise<any>)) => Promise<any>
זוהי פונקציית עזר של תרחיש בדיקה.
לטענת הפונקציה, פעולת ה-Promise שסופקה, שאורזת את פעולת האמולטור, תיפתר ללא הפרות של כללי האבטחה.
await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });
assertFails(pr: Promise<any>)) => Promise<any>
זוהי פונקציית שירות של מקרה בדיקה.
הפונקציה קובעת שה-Promise שסופק ועוטף פעולת אמולטור יידחה עם הפרה של כללי האבטחה.
await assertFails(setDoc(alice.firestore(), '/users/bob'), { ... });
שיטות ספציפיות לאמולטור
ראו גם שיטות בדיקה נפוצות ופונקציות שימושיות באמצעות ה-API המודולרי.
Cloud Firestore
Cloud Firestore
RulesTestEnvironment.clearFirestore() => Promise<void>
השיטה הזו מנקה את הנתונים במסד הנתונים של Firestore ששייך ל-projectId
שהוגדר לאמולטור Firestore.
RulesTestContext.firestore(settings?: Firestore.FirestoreSettings) => Firestore;
השיטה הזו מקבלת מכונת Firestore בשביל הקשר הבדיקה הזה. אפשר להשתמש במכונה שחוזרת של Firebase JS Client SDK עם ממשקי ה-API של ה-Client SDK (מודולרי בגרסה 9 או תואם בגרסה 9).
Realtime Database
Realtime Database
RulesTestEnvironment.clearDatabase() => Promise<void>
השיטה הזו מנקה נתונים ב-Realtime Database ששייכים ל-projectId
שהוגדר למהדר Realtime Database.
RulesTestContext.database(databaseURL?: Firestore.FirestoreSettings) => Firestore;
אחזור מופע של Realtime Database להקשר הבדיקה הזה. אפשר להשתמש במכונה שחוזרת של Firebase JS Client SDK עם ממשקי ה-API של SDK של הלקוח (מודולריים או עם מרחבי שמות, מגרסה 9 ואילך). ה-method מקבל כתובת URL של המכונה של מסד הנתונים GTFS Realtime. אם מצוין, מחזירה מופע של גרסה ממוּלֶלת של מרחב השמות עם פרמטרים שחולצו מכתובת ה-URL.
Cloud Storage
Cloud Storage
RulesTestEnvironment.clearStorage() => Promise<void>
השיטה הזו מנקה אובייקטים ומטא-נתונים בקטגוריות אחסון ששייכות ל-projectId
שהוגדרה למהדר Cloud Storage.
RulesTestContext.storage(bucketUrl?: string) => Firebase Storage;
השיטה הזו מחזירה מופע של Storage שמוגדר להתחבר לאמולטור.
ה-method מקבלת כתובת URL מסוג gs://
לקטגוריית האחסון ב-Firebase לצורך בדיקה. אם מצוין, הפונקציה מחזירה מכונה של Storage לגרסה של שם הקטגוריה שעברה אמולציה.
הרצת בדיקות יחידה מקומיות באמצעות v8 JavaScript SDK
בוחרים מוצר כדי לראות את השיטות שמשמשות את Firebase Test SDK להתממשק עם האמולטור.
Cloud Firestore
initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp
השיטה הזו מחזירה אפליקציית Firebase מופעלת בהתאם למזהה הפרויקט ולמשתנה האימות שצוינו באפשרויות. אפשר להשתמש באפשרות הזו כדי ליצור אפליקציה שמאומתת כמשתמש ספציפי לשימוש בבדיקות.
firebase.initializeTestApp({ projectId: "my-test-project", auth: { uid: "alice", email: "alice@example.com" } });
initializeAdminApp({ projectId: string }) => FirebaseApp
השיטה הזו מחזירה אפליקציית Firebase עם הרשאת אדמין שהוגדרה. האפליקציה הזו עוקפת את כללי האבטחה כשמבצעים פעולות קריאה וכתיבה. אפשר להשתמש בזה כדי ליצור אפליקציה שמאומתת כאדמין כדי להגדיר מצב לבדיקות.
firebase.initializeAdminApp({ projectId: "my-test-project" });
apps() => [FirebaseApp]
ה-method הזה מחזיר את כל אפליקציות הבדיקה והאדמין שהוגדרו כרגע.
אפשר להשתמש בה כדי לנקות אפליקציות בין בדיקות או אחריהן.
Promise.all(firebase.apps().map(app => app.delete()))
loadFirestoreRules({ projectId: string, rules: Object }) => Promise
השיטה הזו שולחת כללים למסד נתונים שפועל באופן מקומי. היא לוקחת אובייקט שמציין את הכללים כמחרוזת. משתמשים בשיטה הזו כדי להגדיר את הכללים של מסד הנתונים.
firebase.loadFirestoreRules({ projectId: "my-test-project", rules: fs.readFileSync("/path/to/firestore.rules", "utf8") });
assertFails(pr: Promise) => Promise
השיטה הזו מחזירה הבטחה שנדחית אם הקלט מצליח, או שהיא מצליחה אם הקלט נדחה. אפשר להשתמש בזה כדי לאמת אם קריאה או כתיבה של מסד נתונים נכשלו.
firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
assertSucceeds(pr: Promise) => Promise
השיטה הזו מחזירה הבטחה שמתבצעת אם הקלט מסתיים בהצלחה, נדחית אם הקלט נדחה. אפשר להשתמש במדד הזה כדי לטעון שהקריאה או הכתיבה של מסד הנתונים מצליחות.
firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
clearFirestoreData({ projectId: string }) => Promise
השיטה הזו מנקה את כל הנתונים שמשויכים לפרויקט מסוים במכונה של Firestore שפועלת באופן מקומי. משתמשים בשיטה הזו כדי לנקות אחרי בדיקות.
firebase.clearFirestoreData({ projectId: "my-test-project" });
Realtime Database
Realtime Database
initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp
אפשר להשתמש באפשרות הזו כדי ליצור אפליקציה שמאומתת כמשתמש ספציפי לשימוש בבדיקות.
הפונקציה מחזירה אפליקציית Firebase מופעלת בהתאם לשם מסד הנתונים ולערך החלופי של משתנה האימות שצוין באפשרויות.
firebase.initializeTestApp({
databaseName: "my-database",
auth: { uid: "alice" }
});
initializeAdminApp({ databaseName: string }) => FirebaseApp
אפשר להשתמש באפשרות הזו ליצירת אפליקציה שאומתה כאדמין להגדרת מצב לבדיקות.
הפונקציה מחזירה אפליקציית Firebase לאדמין שהוגדרה בהתאם לשם מסד הנתונים שצוין באפשרויות. האפליקציה הזו עוקפת את כללי האבטחה במהלך קריאה וכתיבה במסד הנתונים.
firebase.initializeAdminApp({ databaseName: "my-database" });
loadDatabaseRules({ databaseName: string, rules: Object }) => Promise
אפשר להשתמש בה כדי להגדיר את הכללים של מסד הנתונים.
שליחת כללים למסד נתונים שפועל באופן מקומי. הפונקציה מקבלת אובייקט אפשרויות שמציין את ה-'databaseName' ואת ה-'כללים' שלכם כמחרוזות.
firebase
.loadDatabaseRules({
databaseName: "my-database",
rules: "{'rules': {'.read': false, '.write': false}}"
});
apps() => [FirebaseApp]
הפונקציה מחזירה את כל אפליקציות הבדיקה והניהול שמופעלות עכשיו.
כדאי להשתמש בה כדי לנקות אפליקציות בין בדיקות או לאחר מכן (שימו לב שאפליקציות שאותחלו עם מאזינים פעילים מונעות יציאה מ-JavaScript):
Promise.all(firebase.apps().map(app => app.delete()))
assertFails(pr: Promise) => Promise
הפונקציה מחזירה הבטחה (promise) שנדחית אם הקלט מצליח, ומצליחה אם הקלט נדחה.
אפשר להשתמש בזה כדי לאמת שקריאה או כתיבת במסד נתונים נכשלו:
firebase.assertFails(app.database().ref("secret").once("value"));
assertSucceeds(pr: Promise) => Promise
הפונקציה מחזירה הבטחה (promise) שמתבצעת אם הקלט מסתיים בהצלחה, ודחיתה אם הקלט נדחה.
אפשר להשתמש בה כדי לטעון שהקריאה או הכתיבה של מסד הנתונים מצליחות:
firebase.assertSucceeds(app.database().ref("public").once("value"));
Cloud Storage
Cloud Storage
initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp
אפשר להשתמש באפשרות הזו כדי ליצור אפליקציה שמאומתת כמשתמש ספציפי לשימוש בבדיקות.
הפונקציה מחזירה אפליקציית firebase מופעלת בהתאם לשם הקטגוריה של האחסון ולשינוי המשתנה של האימות שצוין באפשרויות.
firebase.initializeTestApp({
storageBucket: "my-bucket",
auth: { uid: "alice" }
});
initializeAdminApp({ storageBucket: string }) => FirebaseApp
אפשר להשתמש בזה כדי ליצור אפליקציה שמאומתת כאדמין כדי להגדיר מצב לבדיקות.
הפונקציה מחזירה אפליקציית Firebase לאדמין שהוגדרה מראש בהתאם לשם הקטגוריה של האחסון שצוין באפשרויות. האפליקציה הזו עוקפת את כללי האבטחה בקריאה ובכתיבה בקטגוריה.
firebase.initializeAdminApp({ storageBucket: "my-bucket" });
loadStorageRules({ storageBucket: string, rules: Object }) => Promise
אפשר להשתמש בה כדי להגדיר את הכללים של קטגוריית האחסון.
שליחת כללים לקטגוריות אחסון שמנוהלות באופן מקומי. הפונקציה מקבלת אובייקט אפשרויות שמציין את 'קטגוריית האחסון' ואת 'כללים' כמחרוזות.
firebase
.loadStorageRules({
storageBucket: "my-bucket",
rules: fs.readFileSync("/path/to/storage.rules", "utf8")
});
apps() => [FirebaseApp]
הפונקציה מחזירה את כל האפליקציות לבדיקה ולניהול שמופעלות כרגע.
כדאי להשתמש בה כדי לנקות אפליקציות בין בדיקות או לאחר מכן (שימו לב שאפליקציות שאותחלו עם מאזינים פעילים מונעות יציאה מ-JavaScript):
Promise.all(firebase.apps().map(app => app.delete()))
assertFails(pr: Promise) => Promise
הפונקציה מחזירה הבטחה (promise) שנדחית אם הקלט מצליח, ומצליחה אם הקלט נדחה.
משתמשים בזה כדי לאמת שקריאה או כתיבת בקטגוריית אחסון נכשלו:
firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());
assertSucceeds(pr: Promise) => Promise
הפונקציה מחזירה הבטחה (promise) שמתבצעת אם הקלט מצליח, ודחיתה אם הקלט נדחה.
משתמשים בזה כדי לאמת שקריאה או כתיבת בקטגוריית אחסון הסתיימו בהצלחה:
firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());
ממשק ה-API של ספריית RUT ל-JS SDK v8
בוחרים מוצר כדי לראות את השיטות שבהן Firebase Test SDK משתמש כדי ליצור ממשק עם הסימולטור.
Cloud Firestore
Cloud Firestore
initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp
השיטה הזו מחזירה אפליקציית Firebase מופעלת בהתאם למזהה הפרויקט ולמשתנה האימות שצוינו באפשרויות. אפשר להשתמש באפשרות הזו כדי ליצור אפליקציה שמאומתת כמשתמש ספציפי לשימוש בבדיקות.
firebase.initializeTestApp({ projectId: "my-test-project", auth: { uid: "alice", email: "alice@example.com" } });
initializeAdminApp({ projectId: string }) => FirebaseApp
השיטה הזו מחזירה אפליקציית Firebase עם הרשאת אדמין שהוגדרה. האפליקציה הזו עוקפת את כללי האבטחה כשמבצעים פעולות קריאה וכתיבה. אפשר להשתמש בזה כדי ליצור אפליקציה שמאומתת כאדמין כדי להגדיר מצב לבדיקות.
firebase.initializeAdminApp({ projectId: "my-test-project" });
apps() => [FirebaseApp]
ה-method הזה מחזיר את כל אפליקציות הבדיקה והאדמין שהוגדרו כרגע.
אפשר להשתמש בה כדי לנקות אפליקציות בין בדיקות או אחריהן.
Promise.all(firebase.apps().map(app => app.delete()))
loadFirestoreRules({ projectId: string, rules: Object }) => Promise
השיטה הזו שולחת כללים למסד נתונים שפועל באופן מקומי. היא לוקחת אובייקט שמציין את הכללים כמחרוזת. משתמשים בשיטה הזו כדי להגדיר את הכללים של מסד הנתונים.
firebase.loadFirestoreRules({ projectId: "my-test-project", rules: fs.readFileSync("/path/to/firestore.rules", "utf8") });
assertFails(pr: Promise) => Promise
השיטה הזו מחזירה הבטחה שנדחית אם הקלט מצליח, או שהיא מצליחה אם הקלט נדחה. אפשר להשתמש בזה כדי לאמת אם קריאה או כתיבה של מסד נתונים נכשלו.
firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
assertSucceeds(pr: Promise) => Promise
השיטה הזו מחזירה הבטחה שמתבצעת אם הקלט מסתיים בהצלחה, נדחית אם הקלט נדחה. אפשר להשתמש במדד הזה כדי לטעון שהקריאה או הכתיבה של מסד הנתונים מצליחות.
firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
clearFirestoreData({ projectId: string }) => Promise
השיטה הזו מנקה את כל הנתונים שמשויכים לפרויקט מסוים במכונה של Firestore שפועלת באופן מקומי. משתמשים בשיטה הזו כדי לנקות אחרי בדיקות.
firebase.clearFirestoreData({ projectId: "my-test-project" });
Realtime Database
Realtime Database
initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp
אפשר להשתמש באפשרות הזו כדי ליצור אפליקציה שמאומתת כמשתמש ספציפי לשימוש בבדיקות.
הפונקציה מחזירה אפליקציית Firebase מופעלת בהתאם לשם מסד הנתונים ולערך החלופי של משתנה האימות שצוין באפשרויות.
firebase.initializeTestApp({
databaseName: "my-database",
auth: { uid: "alice" }
});
initializeAdminApp({ databaseName: string }) => FirebaseApp
אפשר להשתמש באפשרות הזו ליצירת אפליקציה שאומתה כאדמין להגדרת מצב לבדיקות.
הפונקציה מחזירה אפליקציית Firebase לאדמין שהוגדרה בהתאם לשם מסד הנתונים שצוין באפשרויות. האפליקציה הזו עוקפת את כללי האבטחה במהלך קריאה וכתיבה במסד הנתונים.
firebase.initializeAdminApp({ databaseName: "my-database" });
loadDatabaseRules({ databaseName: string, rules: Object }) => Promise
אפשר להשתמש בה כדי להגדיר את הכללים של מסד הנתונים.
שליחת כללים למסד נתונים שפועל באופן מקומי. הפונקציה מקבלת אובייקט אפשרויות שמציין את ה-'databaseName' ואת ה-'כללים' שלכם כמחרוזות.
firebase
.loadDatabaseRules({
databaseName: "my-database",
rules: "{'rules': {'.read': false, '.write': false}}"
});
apps() => [FirebaseApp]
הפונקציה מחזירה את כל אפליקציות הבדיקה והניהול שמופעלות עכשיו.
כדאי להשתמש בה כדי לנקות אפליקציות בין בדיקות או לאחר מכן (שימו לב שאפליקציות שאותחלו עם מאזינים פעילים מונעות יציאה מ-JavaScript):
Promise.all(firebase.apps().map(app => app.delete()))
assertFails(pr: Promise) => Promise
הפונקציה מחזירה הבטחה (promise) שנדחית אם הקלט מצליח, ומצליחה אם הקלט נדחה.
אפשר להשתמש בזה כדי לאמת שקריאה או כתיבת במסד נתונים נכשלו:
firebase.assertFails(app.database().ref("secret").once("value"));
assertSucceeds(pr: Promise) => Promise
הפונקציה מחזירה הבטחה (promise) שמתבצעת אם הקלט מסתיים בהצלחה, ודחיתה אם הקלט נדחה.
אפשר להשתמש בה כדי לטעון שהקריאה או הכתיבה של מסד הנתונים מצליחות:
firebase.assertSucceeds(app.database().ref("public").once("value"));
Cloud Storage
Cloud Storage
initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp
אפשר להשתמש באפשרות הזו כדי ליצור אפליקציה שמאומתת כמשתמש ספציפי לשימוש בבדיקות.
הפונקציה מחזירה אפליקציית firebase מופעלת בהתאם לשם הקטגוריה של האחסון ולשינוי המשתנה של האימות שצוין באפשרויות.
firebase.initializeTestApp({
storageBucket: "my-bucket",
auth: { uid: "alice" }
});
initializeAdminApp({ storageBucket: string }) => FirebaseApp
אפשר להשתמש בזה כדי ליצור אפליקציה שמאומתת כאדמין כדי להגדיר מצב לבדיקות.
הפונקציה מחזירה אפליקציית Firebase לאדמין שהוגדרה מראש בהתאם לשם הקטגוריה של האחסון שצוין באפשרויות. האפליקציה הזו עוקפת את כללי האבטחה בקריאה ובכתיבה בקטגוריה.
firebase.initializeAdminApp({ storageBucket: "my-bucket" });
loadStorageRules({ storageBucket: string, rules: Object }) => Promise
אפשר להשתמש בה כדי להגדיר את הכללים של קטגוריית האחסון.
שליחת כללים לקטגוריות אחסון שמנוהלות באופן מקומי. הפונקציה מקבלת אובייקט אפשרויות שמציין את 'קטגוריית האחסון' ואת 'כללים' כמחרוזות.
firebase
.loadStorageRules({
storageBucket: "my-bucket",
rules: fs.readFileSync("/path/to/storage.rules", "utf8")
});
apps() => [FirebaseApp]
הפונקציה מחזירה את כל האפליקציות לבדיקה ולניהול שמופעלות כרגע.
כדאי להשתמש בה כדי לנקות אפליקציות בין בדיקות או לאחר מכן (שימו לב שאפליקציות שאותחלו עם מאזינים פעילים מונעות יציאה מ-JavaScript):
Promise.all(firebase.apps().map(app => app.delete()))
assertFails(pr: Promise) => Promise
הפונקציה מחזירה הבטחה (promise) שנדחית אם הקלט מצליח, ומצליחה אם הקלט נדחה.
משתמשים בזה כדי לאמת שקריאה או כתיבת בקטגוריית אחסון נכשלו:
firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());
assertSucceeds(pr: Promise) => Promise
הפונקציה מחזירה הבטחה (promise) שמתבצעת אם הקלט מצליח, ודחיתה אם הקלט נדחה.
משתמשים בזה כדי לאמת שקריאה או כתיבת בקטגוריית אחסון הסתיימו בהצלחה:
firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());