יצירת בדיקות של יחידות מידה

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