בעזרת 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 של הלקוח, ויעריכו את הכללים בהתאם. כך תוכלו לחבר את האפליקציה ישירות לסימולטורים במהלך שילוב ובמהלך בדיקות ידניות.
ההבדלים בין המהדמנים של מסדי הנתונים לבין סביבות הייצור
- אין צורך ליצור מכונה של מסד נתונים באופן מפורש. בכל מופע של מסד נתונים שאליו תהיה גישה, ייווצר באופן אוטומטי מכונה ב-emulator.
- כל מסד נתונים חדש מתחיל עם כללים סגורים, כך שמשתמשים שאינם אדמינים לא יוכלו לקרוא או לכתוב.
- כל מסד נתונים ממולא מחקה את המגבלות והמכסות של תוכנית 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 תמיד מודעת למהדמנים, והיא אף פעם לא נוגעת במשאבי הייצור שלכם.
מייבאים את הספרייה באמצעות הצהרות ייבוא מודולריות בגרסה 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
. - הגדרת חבילה של בדיקות וכל בדיקה בנפרד עם קוד לפני/אחרי (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()
מריצים פונקציית הגדרה לבדיקה עם הקשר שפועל כאילו כללי האבטחה הושבתו.
השיטה מקבלת פונקציית קריאה חוזרת, שמקבלת את ההקשר של עקיפת כללי האבטחה ומחזירה אובייקט 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 של SDK של הלקוח (מודולריים או עם מרחבי שמות, בגרסה 9 ואילך). השיטה מקבלת כתובת URL של מופע של Realtime Database. אם מצוין, מחזירה מופע של גרסה ממוּלֶלת של מרחב השמות עם פרמטרים שחולצו מכתובת ה-URL.
Cloud Storage
Cloud Storage
RulesTestEnvironment.clearStorage() => Promise<void>
השיטה הזו מנקה אובייקטים ומטא-נתונים בקטגוריות אחסון ששייכות ל-projectId
שהוגדרה למהדר Cloud Storage.
RulesTestContext.storage(bucketUrl?: string) => Firebase Storage;
השיטה הזו מחזירה מופע של Storage שמוגדר להתחבר לאמולטור.
השיטה מקבלת כתובת 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
השיטה הזו מחזירה הבטחה (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
הפונקציה מחזירה הבטחה (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
אפשר להשתמש בה כדי להגדיר את הכללים של קטגוריית האחסון.
שליחת כללים לקטגוריות אחסון בניהול מקומי. הפונקציה מקבלת אובייקט אפשרויות שמציין את '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
הפונקציה מחזירה הבטחה (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
השיטה הזו מחזירה הבטחה (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
הפונקציה מחזירה הבטחה (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
אפשר להשתמש בה כדי להגדיר את הכללים של קטגוריית האחסון.
שליחת כללים לקטגוריות אחסון בניהול מקומי. הפונקציה מקבלת אובייקט אפשרויות שמציין את '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
הפונקציה מחזירה הבטחה (promise) שנדחית אם הקלט מצליח, ומצליחה אם הקלט נדחה.
משתמשים בזה כדי לאמת שקריאה או כתיבת בקטגוריית אחסון נכשלו:
firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());
assertSucceeds(pr: Promise) => Promise
הפונקציה מחזירה הבטחה (promise) שמתבצעת אם הקלט מצליח, ודחיתה אם הקלט נדחה.
משתמשים בזה כדי לאמת שקריאה או כתיבת בקטגוריית אחסון הסתיימו בהצלחה:
firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());