Firebase Local Emulator Suite כדי שיהיה לכם קל יותר לאמת באופן מלא את התכונות וההתנהגות של האפליקציה. זה גם כלי מצוין לאימות ההגדרות של Firebase Security Rules. אפשר להשתמש באמולטורים של Firebase כדי להריץ בדיקות יחידה בסביבה מקומית ולאוטומט אותן. השיטות שמפורטות במסמך הזה יעזרו לכם ליצור בדיקות יחידה אוטומטיות לאפליקציה שלכם ולאמת את Rules.
אם עדיין לא עשיתם זאת, מגדירים את ה-Emulators של Firebase.
לפני שמריצים את האמולטור
לפני שמתחילים להשתמש באמולטור, חשוב לזכור את הנקודות הבאות:
- האמולטור יטען בהתחלה את הכללים שצוינו בשדה
firestore.rules
או בשדהstorage.rules
בקובץfirebase.json
. אם הקובץ לא קיים ולא משתמשים בשיטהloadFirestoreRules
אוloadStorageRules
כמו שמתואר בהמשך, האמולטור מתייחס לכל הפרויקטים כאילו יש להם כללים פתוחים. - רוב ערכות ה-SDK של Firebase פועלות ישירות עם האמולטורים, אבל רק ספריית
@firebase/rules-unit-testing
תומכת ב-mockingauth
בכללי האבטחה, ולכן קל יותר לבצע בדיקות יחידה. בנוסף, הספרייה תומכת בכמה תכונות ספציפיות לאמולטור, כמו מחיקת כל הנתונים, כמו שמופיע בהמשך. - האמולטורים יקבלו גם טוקנים של Firebase Auth מהסביבה הפרודקטיבית שסופקו דרך ערכות SDK של לקוח, ויעריכו את הכללים בהתאם. כך תוכלו לקשר את האפליקציה ישירות לאמולטורים בבדיקות שילוב ובבדיקות ידניות.
ההבדלים בין אמולטורים של מסדי נתונים לבין סביבת הייצור
- אתם לא צריכים ליצור במפורש מופע של מסד נתונים. האמולטור ייצור באופן אוטומטי כל מופע של מסד נתונים שיש אליו גישה.
- כל מסד נתונים חדש מתחיל עם כללים סגורים, כך שמשתמשים שאינם אדמינים לא יוכלו לקרוא או לכתוב.
- כל מסד נתונים מדומה כפוף למגבלות ולמכסות של תוכנית Spark (בעיקר, כל מופע מוגבל ל-100 חיבורים בו-זמניים).
- כל מסד נתונים יקבל את המחרוזת
"owner"
כאסימון אימות של אדמין. - כרגע אין אינטראקציות פעילות בין האמולטורים לבין מוצרים אחרים של Firebase. חשוב לציין שתהליך האימות הרגיל ב-Firebase לא פועל.
במקום זאת, אפשר להשתמש בשיטה
initializeTestApp()
בספרייהrules-unit-testing
, שמקבלת שדהauth
. האובייקט של Firebase שנוצר באמצעות השיטה הזו מתנהג כאילו הוא עבר אימות בהצלחה בתור כל ישות שאתם מספקים. אם מעבירים את הערךnull
, המערכת תתייחס למשתמש כאל משתמש לא מאומת (לדוגמה, כלליauth != null
ייכשלו).
אינטראקציה עם אמולטור Realtime Database
אפשר לגשת למופע של Firebase Realtime Database בסביבת ייצור בתת-דומיין של firebaseio.com
, ואפשר לגשת ל-REST API כך:
https://<database_name>.firebaseio.com/path/to/my/data.json
האמולטור פועל באופן מקומי וזמין בכתובת localhost:9000
. כדי ליצור אינטראקציה עם מופע מסד נתונים ספציפי, צריך להשתמש בפרמטר השאילתה ns
כדי לציין את שם מסד הנתונים.
http://localhost:9000/path/to/my/data.json?ns=<database_name>
הרצת בדיקות יחידה מקומיות באמצעות גרסה 9 של JavaScript SDK
Firebase מפיצה ספרייה לבדיקת יחידות של כללי אבטחה עם גרסה 9 של JavaScript SDK ועם גרסה 8 של SDK. ממשקי ה-API של הספרייה שונים באופן משמעותי. מומלץ להשתמש בספריית הבדיקות v9, שהיא יעילה יותר ודורשת פחות הגדרות כדי להתחבר לאמולטורים, וכך אפשר להימנע בבטחה משימוש לא מכוון במשאבי ייצור. כדי לשמור על תאימות לאחור, אנחנו ממשיכים להציע את ספריית הבדיקות v8.
משתמשים במודול @firebase/rules-unit-testing
כדי ליצור אינטראקציה עם האמולטור שפועל באופן מקומי. אם מופיעות שגיאות של פסק זמן או שגיאות ECONNREFUSED
, צריך לוודא שהאמולטור פועל.
מומלץ מאוד להשתמש בגרסה עדכנית של Node.js כדי שתוכלו להשתמש בסימון async/await
. כמעט כל ההתנהגויות שתרצו לבדוק כוללות פונקציות אסינכרוניות, ומודול הבדיקה מיועד לעבוד עם קוד מבוסס-Promise.
ספריית בדיקות היחידה של כללים בגרסה 9 תמיד מודעת לאמולטורים ולעולם לא נוגעת במשאבי הייצור שלכם.
מייבאים את הספרייה באמצעות הצהרות ייבוא מודולריות של גרסה 9. לדוגמה:
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
. - הגדרה של חבילת בדיקות ושל פעולות לפני ואחרי כל בדיקה עם קריאות לניקוי נתוני הבדיקה והסביבה, כמו
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 מדומה. אפשר להעביר אובייקט שמגדיר טענות מותאמות אישית או שינויים ב-payload של טוקן 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 Auth.
משתמשים באובייקט הקשר של הבדיקה שמוחזר בבדיקות כדי לגשת לכל המופעים של האמולטור שהוגדרו, כולל אלה שהוגדרו באמצעות 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()
הפעלת פונקציית הגדרת בדיקה עם הקשר שמתנהג כאילו כללי האבטחה מושבתים.
השיטה הזו מקבלת פונקציית קריאה חוזרת, שמקבלת את ההקשר של עקיפת כללי האבטחה ומחזירה אובייקט promise. ההקשר יימחק אחרי שההבטחה תתקבל או תידחה.
RulesTestEnvironment.cleanup()
השיטה הזו מוחקת את כל 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 של Client SDK (מודולרי או עם מרחב שמות, גרסה 9 ואילך). השיטה מקבלת כתובת URL של מופע Realtime Database. אם מצוין, מחזירה מופע של גרסה מדומה של מרחב השמות עם פרמטרים שחולצו מכתובת ה-URL.
Cloud Storage
Cloud Storage
RulesTestEnvironment.clearStorage() => Promise<void>
השיטה הזו מוחקת אובייקטים ומטא-נתונים בקטגוריות אחסון ששייכות ל-projectId
שהוגדר לאמולטור Cloud Storage.
RulesTestContext.storage(bucketUrl?: string) => Firebase Storage;
השיטה הזו מחזירה מופע של Storage שמוגדר להתחבר לאמולטור.
השיטה מקבלת gs://
כתובת URL של Firebase Storage Bucket לבדיקה. אם מציינים, הפונקציה מחזירה מופע של 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]
השיטה הזו מחזירה את כל אפליקציות הבדיקה והאדמין שאותחלו כרגע.
אפשר להשתמש באפשרות הזו כדי לנקות את האפליקציות בין הבדיקות או אחריהן.
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 ואת rules כמחרוזות.
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
מחזירה הבטחה שנדחית אם הקלט מצליח, ומצליחה אם הקלט נדחה.
כדי לוודא שקריאה או כתיבה במסד נתונים נכשלו:
firebase.assertFails(app.database().ref("secret").once("value"));
assertSucceeds(pr: Promise) => Promise
מחזירה הבטחה שמסתיימת בהצלחה אם הקלט מסתיים בהצלחה, ונדחית אם הקלט נדחה.
כדי לוודא שפעולת קריאה או כתיבה במסד נתונים מצליחה:
firebase.assertSucceeds(app.database().ref("public").once("value"));
Cloud Storage
Cloud Storage
initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp
אפשר להשתמש בזה כדי ליצור אפליקציה מאומתת כמשתמש ספציפי לשימוש בבדיקות.
הפונקציה מחזירה אפליקציית Firebase מאותחלת שמתאימה לשם קטגוריית האחסון ולשינוי המשתנה auth שצוינו באפשרויות.
firebase.initializeTestApp({
storageBucket: "my-bucket",
auth: { uid: "alice" }
});
initializeAdminApp({ storageBucket: string }) => FirebaseApp
אפשר להשתמש בזה כדי ליצור אפליקציה שאומתה כאדמין כדי להגדיר מצב לבדיקות.
הפונקציה מחזירה אפליקציית Firebase של אדמין שעברה אתחול, בהתאם לשם של קטגוריית האחסון שצוין באפשרויות. האפליקציה הזו עוקפת את כללי האבטחה כשהיא קוראת וכותבת ל-bucket.
firebase.initializeAdminApp({ storageBucket: "my-bucket" });
loadStorageRules({ storageBucket: string, rules: Object }) => Promise
משתמשים בזה כדי להגדיר את הכללים של קטגוריית האחסון.
שליחת כללים לקטגוריות אחסון שמנוהלות באופן מקומי. מקבל אובייקט של אפשרויות שמציין את 'storageBucket' ואת 'rules' כמחרוזות.
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
מחזירה הבטחה שנדחית אם הקלט מצליח, ומצליחה אם הקלט נדחה.
כדי לוודא שפעולת קריאה או כתיבה בקטגוריית אחסון נכשלת:
firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());
assertSucceeds(pr: Promise) => Promise
הפונקציה מחזירה הבטחה שמתקבלת אם הקלט מתקבל, ונדחית אם הקלט נדחה.
כדי לוודא שפעולת קריאה או כתיבה בקטגוריית אחסון הצליחה:
firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());
RUT library API for 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]
השיטה הזו מחזירה את כל אפליקציות הבדיקה והאדמין שאותחלו כרגע.
אפשר להשתמש באפשרות הזו כדי לנקות את האפליקציות בין הבדיקות או אחריהן.
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 ואת rules כמחרוזות.
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
מחזירה הבטחה שנדחית אם הקלט מצליח, ומצליחה אם הקלט נדחה.
כדי לוודא שקריאה או כתיבה במסד נתונים נכשלו:
firebase.assertFails(app.database().ref("secret").once("value"));
assertSucceeds(pr: Promise) => Promise
מחזירה הבטחה שמסתיימת בהצלחה אם הקלט מסתיים בהצלחה, ונדחית אם הקלט נדחה.
כדי לוודא שפעולת קריאה או כתיבה במסד נתונים מצליחה:
firebase.assertSucceeds(app.database().ref("public").once("value"));
Cloud Storage
Cloud Storage
initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp
אפשר להשתמש בזה כדי ליצור אפליקציה מאומתת כמשתמש ספציפי לשימוש בבדיקות.
הפונקציה מחזירה אפליקציית Firebase מאותחלת שמתאימה לשם קטגוריית האחסון ולשינוי המשתנה auth שצוינו באפשרויות.
firebase.initializeTestApp({
storageBucket: "my-bucket",
auth: { uid: "alice" }
});
initializeAdminApp({ storageBucket: string }) => FirebaseApp
אפשר להשתמש בזה כדי ליצור אפליקציה שאומתה כאדמין כדי להגדיר מצב לבדיקות.
הפונקציה מחזירה אפליקציית Firebase של אדמין שעברה אתחול, בהתאם לשם של קטגוריית האחסון שצוין באפשרויות. האפליקציה הזו עוקפת את כללי האבטחה כשהיא קוראת וכותבת ל-bucket.
firebase.initializeAdminApp({ storageBucket: "my-bucket" });
loadStorageRules({ storageBucket: string, rules: Object }) => Promise
משתמשים בזה כדי להגדיר את הכללים של קטגוריית האחסון.
שליחת כללים לקטגוריות אחסון שמנוהלות באופן מקומי. מקבל אובייקט של אפשרויות שמציין את 'storageBucket' ואת 'rules' כמחרוזות.
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
מחזירה הבטחה שנדחית אם הקלט מצליח, ומצליחה אם הקלט נדחה.
כדי לוודא שפעולת קריאה או כתיבה בקטגוריית אחסון נכשלת:
firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());
assertSucceeds(pr: Promise) => Promise
הפונקציה מחזירה הבטחה שמתקבלת אם הקלט מתקבל, ונדחית אם הקלט נדחה.
כדי לוודא שפעולת קריאה או כתיבה בקטגוריית אחסון הצליחה:
firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());