Erstellen Sie Unit-Tests

Die Firebase Local Emulator Suite erleichtert die vollständige Validierung der Funktionen und des Verhaltens Ihrer App. Es ist auch ein großartiges Tool zum Überprüfen Ihrer Firebase-Sicherheitsregelkonfigurationen. Verwenden Sie die Firebase-Emulatoren, um Komponententests in einer lokalen Umgebung auszuführen und zu automatisieren. Die in diesem Dokument beschriebenen Methoden sollen Ihnen beim Erstellen und Automatisieren von Komponententests für Ihre App helfen, die Ihre Regeln validieren.

Wenn Sie es noch nicht getan haben, richten Sie die Firebase-Emulatoren ein .

Bevor Sie den Emulator ausführen

Beachten Sie Folgendes, bevor Sie den Emulator verwenden:

  • Der Emulator lädt zunächst die im Feld firestore.rules “ oder „storage.rules“ Ihrer Datei firebase.json angegebenen Regeln. Wenn die Datei nicht vorhanden ist und Sie die Methode „ loadFirestoreRules oder „loadStorageRules“ nicht wie unten beschrieben verwenden, behandelt der Emulator alle Projekte so, als hätten sie offene Regeln.
  • Während die meisten Firebase-SDKs direkt mit den Emulatoren arbeiten, unterstützt nur die @firebase/rules-unit-testing Bibliothek die Mock- auth in Sicherheitsregeln, was Unit-Tests erheblich vereinfacht. Darüber hinaus unterstützt die Bibliothek einige emulatorspezifische Funktionen wie das Löschen aller Daten, wie unten aufgeführt.
  • Die Emulatoren akzeptieren auch über Client-SDKs bereitgestellte Firebase-Auth-Token für die Produktion und werten die Regeln entsprechend aus, sodass Sie Ihre Anwendung bei Integrations- und manuellen Tests direkt mit den Emulatoren verbinden können.

Unterschiede zwischen den Datenbankemulatoren und der Produktion

  • Sie müssen nicht explizit eine Datenbankinstanz erstellen. Der Emulator erstellt automatisch jede Datenbankinstanz, auf die zugegriffen wird.
  • Jede neue Datenbank wird mit geschlossenen Regeln gestartet, sodass Benutzer ohne Administratorrechte weder lesen noch schreiben können.
  • Jede emulierte Datenbank wendet die Grenzwerte und Kontingente des Spark-Plans an (insbesondere begrenzt dies jede Instanz auf 100 gleichzeitige Verbindungen).
  • Jede Datenbank akzeptiert die Zeichenfolge "owner" als Administrator-Authentifizierungstoken.
  • Die Emulatoren verfügen derzeit nicht über funktionierende Interaktionen mit anderen Firebase-Produkten. Insbesondere funktioniert der normale Firebase-Authentifizierungsablauf nicht. Stattdessen können Sie die Methode initializeTestApp() in der rules-unit-testing Bibliothek verwenden, die ein auth benötigt. Das mit dieser Methode erstellte Firebase-Objekt verhält sich so, als ob es sich erfolgreich als die von Ihnen angegebene Entität authentifiziert hätte. Wenn Sie null übergeben, verhält es sich wie ein nicht authentifizierter Benutzer (z. B. schlagen auth != null Regeln fehl).

Interaktion mit dem Echtzeitdatenbank-Emulator

Auf eine Produktionsinstanz der Firebase-Echtzeitdatenbank kann über eine Subdomain von firebaseio.com zugegriffen werden, und Sie können wie folgt auf die REST-API zugreifen:

https://<database_name>.firebaseio.com/path/to/my/data.json

Der Emulator läuft lokal und ist unter localhost:9000 verfügbar. Um mit einer bestimmten Datenbankinstanz zu interagieren, müssen Sie den Abfrageparameter ns verwenden, um den Datenbanknamen anzugeben.

http://localhost:9000/path/to/my/data.json?ns=<database_name>

Führen Sie lokale Komponententests mit dem JavaScript SDK der Version 9 aus

Firebase vertreibt eine Unit-Testing-Bibliothek für Sicherheitsregeln sowohl mit seinem JavaScript-SDK der Version 9 als auch mit seinem SDK der Version 8. Die Bibliotheks-APIs unterscheiden sich erheblich. Wir empfehlen die v9-Testbibliothek, die schlanker ist und weniger Setup für die Verbindung mit Emulatoren erfordert und so eine versehentliche Nutzung von Produktionsressourcen sicher vermeidet. Aus Gründen der Abwärtskompatibilität stellen wir weiterhin die v8-Testbibliothek zur Verfügung .

Verwenden Sie das Modul @firebase/rules-unit-testing um mit dem Emulator zu interagieren, der lokal ausgeführt wird. Wenn Zeitüberschreitungen oder ECONNREFUSED Fehler auftreten, überprüfen Sie noch einmal, ob der Emulator tatsächlich ausgeführt wird.

Wir empfehlen dringend, eine aktuelle Version von Node.js zu verwenden, damit Sie async/await Notation verwenden können. Fast das gesamte Verhalten, das Sie testen möchten, betrifft asynchrone Funktionen, und das Testmodul ist für die Arbeit mit Promise-basiertem Code konzipiert.

Die v9 Rules Unit Testing-Bibliothek kennt die Emulatoren immer und berührt niemals Ihre Produktionsressourcen.

Sie importieren die Bibliothek mit v9 modularen Importanweisungen. Zum Beispiel:

import {
  assertFails,
  assertSucceeds,
  initializeTestEnvironment,
  RulesTestEnvironment,
} 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.

Nach dem Import umfasst die Implementierung von Unit-Tests Folgendes:

  • Erstellen und Konfigurieren einer RulesTestEnvironment mit einem Aufruf von initializeTestEnvironment .
  • Einrichten von Testdaten ohne Auslösen von Regeln mithilfe einer praktischen Methode, mit der Sie diese vorübergehend umgehen können: RulesTestEnvironment.withSecurityRulesDisabled .
  • Einrichten von Testsuite- und Test-Vorher/Nachher-Hooks mit Aufrufen zum Bereinigen von Testdaten und -umgebung, wie RulesTestEnvironment.cleanup() oder RulesTestEnvironment.clearFirestore() .
  • Implementieren von Testfällen, die Authentifizierungszustände nachahmen, mithilfe von RulesTestEnvironment.authenticatedContext und RulesTestEnvironment.unauthenticatedContext .

Gängige Methoden und Hilfsfunktionen

Siehe auch emulatorspezifische Testmethoden mit der modularen API .

initializeTestEnvironment() => RulesTestEnvironment

Diese Funktion initialisiert eine Testumgebung für Regeleinheitentests. Rufen Sie diese Funktion zuerst für den Testaufbau auf. Für eine erfolgreiche Ausführung müssen Emulatoren ausgeführt werden.

Die Funktion akzeptiert ein optionales Objekt, das eine TestEnvironmentConfig definiert, die aus einer Projekt-ID und Emulatorkonfigurationseinstellungen bestehen kann.

let testEnv = await initializeTestEnvironment({
  projectId: "demo-project-1234",
  firestore: {
    rules: fs.readFileSync("firestore.rules", "utf8"),
  },
});

RulesTestEnvironment.authenticatedContext({ user_id: string, tokenOptions?: TokenOptions }) => RulesTestContext

Diese Methode erstellt einen RulesTestContext , der sich wie ein authentifizierter Authentifizierungsbenutzer verhält. An Anfragen, die über den zurückgegebenen Kontext erstellt werden, ist ein Schein-Authentifizierungstoken angehängt. Übergeben Sie optional ein Objekt, das benutzerdefinierte Ansprüche oder Überschreibungen für Authentifizierungstoken-Nutzlasten definiert.

Verwenden Sie das zurückgegebene Testkontextobjekt in Ihren Tests, um auf alle konfigurierten Emulatorinstanzen zuzugreifen, einschließlich der mit initializeTestEnvironment konfigurierten.

// 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

Diese Methode erstellt einen RulesTestContext , der sich wie ein Client verhält, der nicht über die Authentifizierung angemeldet ist. An Anfragen, die über den zurückgegebenen Kontext erstellt werden, sind keine Firebase-Auth-Tokens angehängt.

Verwenden Sie das zurückgegebene Testkontextobjekt in Ihren Tests, um auf alle konfigurierten Emulatorinstanzen zuzugreifen, einschließlich der mit initializeTestEnvironment konfigurierten.

// 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()

Führen Sie eine Test-Setup-Funktion mit einem Kontext aus, der sich so verhält, als wären die Sicherheitsregeln deaktiviert.

Diese Methode verwendet eine Rückruffunktion, die den Kontext zur Umgehung von Sicherheitsregeln übernimmt und ein Versprechen zurückgibt. Der Kontext wird zerstört, sobald das Versprechen gelöst/ablehnt wird.

RulesTestEnvironment.cleanup()

Diese Methode zerstört alle in der Testumgebung erstellten RulesTestContexts und bereinigt die zugrunde liegenden Ressourcen, sodass ein sauberer Exit möglich ist.

Diese Methode ändert in keiner Weise den Status von Emulatoren. Um Daten zwischen Tests zurückzusetzen, verwenden Sie die anwendungsemulatorspezifische Methode zum Löschen von Daten.

assertSucceeds(pr: Promise<any>)) => Promise<any>

Dies ist eine Dienstprogrammfunktion für Testfälle.

Die Funktion stellt sicher, dass das bereitgestellte Promise, das einen Emulatorvorgang umschließt, ohne Verstöße gegen Sicherheitsregeln aufgelöst wird.

await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });

assertFails(pr: Promise<any>)) => Promise<any>

Dies ist eine Dienstprogrammfunktion für Testfälle.

Die Funktion stellt sicher, dass das bereitgestellte Promise, das einen Emulatorvorgang umschließt, mit einem Verstoß gegen die Sicherheitsregeln abgelehnt wird.

await assertFails(setDoc(alice.firestore(), '/users/bob'), { ... });

Emulatorspezifische Methoden

Sehen Sie sich auch allgemeine Testmethoden und Dienstprogrammfunktionen an, die die modulare API verwenden .

Cloud Firestore

Cloud Firestore

RulesTestEnvironment.clearFirestore() => Promise<void>

Diese Methode löscht Daten in der Firestore-Datenbank, die zur für den Firestore-Emulator konfigurierten projectId gehören.

RulesTestContext.firestore(settings?: Firestore.FirestoreSettings) => Firestore;

Diese Methode ruft eine Firestore-Instanz für diesen Testkontext ab. Die zurückgegebene Firebase JS-Client-SDK-Instanz kann mit den Client-SDK-APIs (v9 modular oder v9 kompatibel) verwendet werden.

Echtzeitdatenbank

Echtzeitdatenbank

RulesTestEnvironment.clearDatabase() => Promise<void>

Diese Methode löscht Daten in der Echtzeitdatenbank, die zur für den Echtzeitdatenbank-Emulator konfigurierten projectId gehören.

RulesTestContext.database(databaseURL?: Firestore.FirestoreSettings) => Firestore;

Rufen Sie eine Echtzeitdatenbankinstanz für diesen Testkontext ab. Die zurückgegebene Firebase JS-Client-SDK-Instanz kann mit den Client-SDK-APIs (modular oder mit Namespace, Version 9 oder höher) verwendet werden. Die Methode akzeptiert eine URL der Realtime Database-Instanz. Wenn angegeben, wird eine Instanz für eine emulierte Version des Namespace mit aus der URL extrahierten Parametern zurückgegeben.

Cloud-Speicher

Cloud-Speicher

RulesTestEnvironment.clearStorage() => Promise<void>

Diese Methode löscht Objekte und Metadaten in Speicher-Buckets, die zur für den Cloud Storage-Emulator konfigurierten projectId gehören.

RulesTestContext.storage(bucketUrl?: string) => Firebase Storage;

Diese Methode gibt eine Speicherinstanz zurück, die für die Verbindung mit dem Emulator konfiguriert ist. Die Methode akzeptiert zum Testen eine gs:// URL zum Firebase Storage Bucket. Wenn angegeben, wird eine Speicherinstanz für eine emulierte Version des Bucket-Namens zurückgegeben.

Führen Sie lokale Komponententests mit dem v8 JavaScript SDK aus

Wählen Sie ein Produkt aus, um die Methoden anzuzeigen, die das Firebase Test SDK für die Schnittstelle mit dem Emulator verwendet.

Cloud Firestore

initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp

Diese Methode gibt eine initialisierte Firebase-App zurück, die der in den Optionen angegebenen Projekt-ID und Authentifizierungsvariablen entspricht. Verwenden Sie dies, um eine als bestimmter Benutzer authentifizierte App zur Verwendung in Tests zu erstellen.

firebase.initializeTestApp({
  projectId: "my-test-project",
  auth: { uid: "alice", email: "alice@example.com" }
});

initializeAdminApp({ projectId: string }) => FirebaseApp

Diese Methode gibt eine initialisierte Admin-Firebase-App zurück. Diese App umgeht Sicherheitsregeln beim Durchführen von Lese- und Schreibvorgängen. Verwenden Sie dies, um eine als Administrator authentifizierte App zu erstellen, um den Status für Tests festzulegen.

firebase.initializeAdminApp({ projectId: "my-test-project" });
    

apps() => [FirebaseApp] Diese Methode gibt alle aktuell initialisierten Test- und Admin-Apps zurück. Verwenden Sie dies, um Apps zwischen oder nach Tests zu bereinigen.

Promise.all(firebase.apps().map(app => app.delete()))

loadFirestoreRules({ projectId: string, rules: Object }) => Promise

Diese Methode sendet Regeln an eine lokal laufende Datenbank. Es benötigt ein Objekt, das die Regeln als Zeichenfolge angibt. Verwenden Sie diese Methode, um die Regeln Ihrer Datenbank festzulegen.

firebase.loadFirestoreRules({
  projectId: "my-test-project",
  rules: fs.readFileSync("/path/to/firestore.rules", "utf8")
});
    

assertFails(pr: Promise) => Promise

Diese Methode gibt ein Versprechen zurück, das abgelehnt wird, wenn die Eingabe erfolgreich ist, oder das erfolgreich ist, wenn die Eingabe abgelehnt wird. Verwenden Sie dies, um festzustellen, ob ein Lese- oder Schreibvorgang in der Datenbank fehlschlägt.

firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
    

assertSucceeds(pr: Promise) => Promise

Diese Methode gibt ein Versprechen zurück, das erfolgreich ist, wenn die Eingabe erfolgreich ist, und abgelehnt wird, wenn die Eingabe abgelehnt wird. Verwenden Sie dies, um festzustellen, ob ein Lese- oder Schreibvorgang in der Datenbank erfolgreich war.

firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
    

clearFirestoreData({ projectId: string }) => Promise

Diese Methode löscht alle Daten, die mit einem bestimmten Projekt in der lokal ausgeführten Firestore-Instanz verknüpft sind. Verwenden Sie diese Methode zum Aufräumen nach Tests.

firebase.clearFirestoreData({
  projectId: "my-test-project"
});
   

Echtzeitdatenbank

Echtzeitdatenbank

initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp

Verwenden Sie diese Option, um eine als bestimmter Benutzer authentifizierte App zur Verwendung in Tests zu erstellen.

Gibt eine initialisierte Firebase-App zurück, die dem in den Optionen angegebenen Datenbanknamen und der Authentifizierungsvariablenüberschreibung entspricht.

firebase.initializeTestApp({
  databaseName: "my-database",
  auth: { uid: "alice" }
});

initializeAdminApp({ databaseName: string }) => FirebaseApp

Verwenden Sie dies, um eine als Administrator authentifizierte App zu erstellen, um den Status für Tests einzurichten.

Gibt eine initialisierte Admin-Firebase-App zurück, die dem in den Optionen angegebenen Datenbanknamen entspricht. Diese App umgeht Sicherheitsregeln beim Lesen und Schreiben in die Datenbank.

firebase.initializeAdminApp({ databaseName: "my-database" });

loadDatabaseRules({ databaseName: string, rules: Object }) => Promise

Verwenden Sie dies, um die Regeln Ihrer Datenbank festzulegen.

Sendet Regeln an eine lokal ausgeführte Datenbank. Akzeptiert ein Optionsobjekt, das Ihren „Datenbanknamen“ und Ihre „Regeln“ als Zeichenfolgen angibt.

firebase
      .loadDatabaseRules({
        databaseName: "my-database",
        rules: "{'rules': {'.read': false, '.write': false}}"
      });

apps() => [FirebaseApp]

Gibt alle aktuell initialisierten Test- und Admin-Apps zurück.

Verwenden Sie dies, um Apps zwischen oder nach Tests zu bereinigen (beachten Sie, dass initialisierte Apps mit aktiven Listenern verhindern, dass JavaScript beendet wird):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

Gibt ein Versprechen zurück, das abgelehnt wird, wenn die Eingabe erfolgreich ist, und erfolgreich ist, wenn die Eingabe abgelehnt wird.

Verwenden Sie dies, um zu bestätigen, dass ein Lese- oder Schreibvorgang in der Datenbank fehlschlägt:

firebase.assertFails(app.database().ref("secret").once("value"));

assertSucceeds(pr: Promise) => Promise

Gibt ein Versprechen zurück, das erfolgreich ist, wenn die Eingabe erfolgreich ist, und abgelehnt wird, wenn die Eingabe abgelehnt wird.

Verwenden Sie dies, um sicherzustellen, dass ein Lese- oder Schreibvorgang in der Datenbank erfolgreich war:

firebase.assertSucceeds(app.database().ref("public").once("value"));

Cloud-Speicher

Cloud-Speicher

initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp

Verwenden Sie diese Option, um eine als bestimmter Benutzer authentifizierte App zur Verwendung in Tests zu erstellen.

Gibt eine initialisierte Firebase-App zurück, die dem in den Optionen angegebenen Speicher-Bucket-Namen und der Überschreibung der Authentifizierungsvariablen entspricht.

firebase.initializeTestApp({
  storageBucket: "my-bucket",
  auth: { uid: "alice" }
});

initializeAdminApp({ storageBucket: string }) => FirebaseApp

Verwenden Sie dies, um eine als Administrator authentifizierte App zu erstellen, um den Status für Tests einzurichten.

Gibt eine initialisierte Admin-Firebase-App zurück, die dem in den Optionen angegebenen Speicher-Bucket-Namen entspricht. Diese App umgeht Sicherheitsregeln beim Lesen und Schreiben in den Bucket.

firebase.initializeAdminApp({ storageBucket: "my-bucket" });

loadStorageRules({ storageBucket: string, rules: Object }) => Promise

Verwenden Sie dies, um die Regeln Ihres Speicher-Buckets festzulegen.

Sendet Regeln an einen lokal verwalteten Speicher-Bucket. Akzeptiert ein Optionsobjekt, das Ihren „storageBucket“ und Ihre „rules“ als Zeichenfolgen angibt.

firebase
      .loadStorageRules({
        storageBucket: "my-bucket",
        rules: fs.readFileSync("/path/to/storage.rules", "utf8")
      });

apps() => [FirebaseApp]

Gibt alle aktuell initialisierten Test- und Admin-Apps zurück.

Verwenden Sie dies, um Apps zwischen oder nach Tests zu bereinigen (beachten Sie, dass initialisierte Apps mit aktiven Listenern verhindern, dass JavaScript beendet wird):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

Gibt ein Versprechen zurück, das abgelehnt wird, wenn die Eingabe erfolgreich ist, und erfolgreich ist, wenn die Eingabe abgelehnt wird.

Verwenden Sie dies, um zu bestätigen, dass das Lesen oder Schreiben eines Speicher-Buckets fehlschlägt:

firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());

assertSucceeds(pr: Promise) => Promise

Gibt ein Versprechen zurück, das erfolgreich ist, wenn die Eingabe erfolgreich ist, und abgelehnt wird, wenn die Eingabe abgelehnt wird.

Verwenden Sie dies, um sicherzustellen, dass das Lesen oder Schreiben eines Speicher-Buckets erfolgreich war:

firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());

RUT-Bibliotheks-API für JS SDK v8

Wählen Sie ein Produkt aus, um die Methoden anzuzeigen, die das Firebase Test SDK für die Schnittstelle mit dem Emulator verwendet.

Cloud Firestore

Cloud Firestore

initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp

Diese Methode gibt eine initialisierte Firebase-App zurück, die der in den Optionen angegebenen Projekt-ID und Authentifizierungsvariablen entspricht. Verwenden Sie diese Option, um eine als bestimmter Benutzer authentifizierte App zur Verwendung in Tests zu erstellen.

firebase.initializeTestApp({
  projectId: "my-test-project",
  auth: { uid: "alice", email: "alice@example.com" }
});

initializeAdminApp({ projectId: string }) => FirebaseApp

Diese Methode gibt eine initialisierte Admin-Firebase-App zurück. Diese App umgeht Sicherheitsregeln beim Durchführen von Lese- und Schreibvorgängen. Verwenden Sie dies, um eine als Administrator authentifizierte App zu erstellen, um den Status für Tests festzulegen.

firebase.initializeAdminApp({ projectId: "my-test-project" });
    

apps() => [FirebaseApp] Diese Methode gibt alle aktuell initialisierten Test- und Admin-Apps zurück. Verwenden Sie dies, um Apps zwischen oder nach Tests zu bereinigen.

Promise.all(firebase.apps().map(app => app.delete()))

loadFirestoreRules({ projectId: string, rules: Object }) => Promise

Diese Methode sendet Regeln an eine lokal laufende Datenbank. Es benötigt ein Objekt, das die Regeln als Zeichenfolge angibt. Verwenden Sie diese Methode, um die Regeln Ihrer Datenbank festzulegen.

firebase.loadFirestoreRules({
  projectId: "my-test-project",
  rules: fs.readFileSync("/path/to/firestore.rules", "utf8")
});
    

assertFails(pr: Promise) => Promise

Diese Methode gibt ein Versprechen zurück, das abgelehnt wird, wenn die Eingabe erfolgreich ist, oder das erfolgreich ist, wenn die Eingabe abgelehnt wird. Verwenden Sie dies, um festzustellen, ob ein Lese- oder Schreibvorgang in der Datenbank fehlschlägt.

firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
    

assertSucceeds(pr: Promise) => Promise

Diese Methode gibt ein Versprechen zurück, das erfolgreich ist, wenn die Eingabe erfolgreich ist, und abgelehnt wird, wenn die Eingabe abgelehnt wird. Verwenden Sie dies, um festzustellen, ob ein Lese- oder Schreibvorgang in der Datenbank erfolgreich war.

firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
    

clearFirestoreData({ projectId: string }) => Promise

Diese Methode löscht alle Daten, die mit einem bestimmten Projekt in der lokal ausgeführten Firestore-Instanz verknüpft sind. Verwenden Sie diese Methode zum Aufräumen nach Tests.

firebase.clearFirestoreData({
  projectId: "my-test-project"
});
   

Echtzeitdatenbank

Echtzeitdatenbank

initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp

Verwenden Sie diese Option, um eine als bestimmter Benutzer authentifizierte App zur Verwendung in Tests zu erstellen.

Gibt eine initialisierte Firebase-App zurück, die dem in den Optionen angegebenen Datenbanknamen und der Authentifizierungsvariablenüberschreibung entspricht.

firebase.initializeTestApp({
  databaseName: "my-database",
  auth: { uid: "alice" }
});

initializeAdminApp({ databaseName: string }) => FirebaseApp

Verwenden Sie dies, um eine als Administrator authentifizierte App zu erstellen, um den Status für Tests einzurichten.

Gibt eine initialisierte Admin-Firebase-App zurück, die dem in den Optionen angegebenen Datenbanknamen entspricht. Diese App umgeht Sicherheitsregeln beim Lesen und Schreiben in die Datenbank.

firebase.initializeAdminApp({ databaseName: "my-database" });

loadDatabaseRules({ databaseName: string, rules: Object }) => Promise

Verwenden Sie dies, um die Regeln Ihrer Datenbank festzulegen.

Sendet Regeln an eine lokal ausgeführte Datenbank. Akzeptiert ein Optionsobjekt, das Ihren „Datenbanknamen“ und Ihre „Regeln“ als Zeichenfolgen angibt.

firebase
      .loadDatabaseRules({
        databaseName: "my-database",
        rules: "{'rules': {'.read': false, '.write': false}}"
      });

apps() => [FirebaseApp]

Gibt alle aktuell initialisierten Test- und Admin-Apps zurück.

Verwenden Sie dies, um Apps zwischen oder nach Tests zu bereinigen (beachten Sie, dass initialisierte Apps mit aktiven Listenern verhindern, dass JavaScript beendet wird):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

Gibt ein Versprechen zurück, das abgelehnt wird, wenn die Eingabe erfolgreich ist, und erfolgreich ist, wenn die Eingabe abgelehnt wird.

Verwenden Sie dies, um zu bestätigen, dass ein Lese- oder Schreibvorgang in der Datenbank fehlschlägt:

firebase.assertFails(app.database().ref("secret").once("value"));

assertSucceeds(pr: Promise) => Promise

Gibt ein Versprechen zurück, das erfolgreich ist, wenn die Eingabe erfolgreich ist, und abgelehnt wird, wenn die Eingabe abgelehnt wird.

Verwenden Sie dies, um sicherzustellen, dass ein Lese- oder Schreibvorgang in der Datenbank erfolgreich war:

firebase.assertSucceeds(app.database().ref("public").once("value"));

Cloud-Speicher

Cloud-Speicher

initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp

Verwenden Sie diese Option, um eine als bestimmter Benutzer authentifizierte App zur Verwendung in Tests zu erstellen.

Gibt eine initialisierte Firebase-App zurück, die dem in den Optionen angegebenen Speicher-Bucket-Namen und der Überschreibung der Authentifizierungsvariablen entspricht.

firebase.initializeTestApp({
  storageBucket: "my-bucket",
  auth: { uid: "alice" }
});

initializeAdminApp({ storageBucket: string }) => FirebaseApp

Verwenden Sie dies, um eine als Administrator authentifizierte App zu erstellen, um den Status für Tests einzurichten.

Gibt eine initialisierte Admin-Firebase-App zurück, die dem in den Optionen angegebenen Speicher-Bucket-Namen entspricht. Diese App umgeht Sicherheitsregeln beim Lesen und Schreiben in den Bucket.

firebase.initializeAdminApp({ storageBucket: "my-bucket" });

loadStorageRules({ storageBucket: string, rules: Object }) => Promise

Verwenden Sie dies, um die Regeln Ihres Speicher-Buckets festzulegen.

Sendet Regeln an einen lokal verwalteten Speicher-Bucket. Akzeptiert ein Optionsobjekt, das Ihren „storageBucket“ und Ihre „rules“ als Zeichenfolgen angibt.

firebase
      .loadStorageRules({
        storageBucket: "my-bucket",
        rules: fs.readFileSync("/path/to/storage.rules", "utf8")
      });

apps() => [FirebaseApp]

Gibt alle aktuell initialisierten Test- und Admin-Apps zurück.

Verwenden Sie dies, um Apps zwischen oder nach Tests zu bereinigen (beachten Sie, dass initialisierte Apps mit aktiven Listenern verhindern, dass JavaScript beendet wird):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

Gibt ein Versprechen zurück, das abgelehnt wird, wenn die Eingabe erfolgreich ist, und erfolgreich ist, wenn die Eingabe abgelehnt wird.

Verwenden Sie dies, um zu bestätigen, dass das Lesen oder Schreiben eines Speicher-Buckets fehlschlägt:

firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());

assertSucceeds(pr: Promise) => Promise

Gibt ein Versprechen zurück, das erfolgreich ist, wenn die Eingabe erfolgreich ist, und abgelehnt wird, wenn die Eingabe abgelehnt wird.

Verwenden Sie dies, um sicherzustellen, dass das Lesen oder Schreiben eines Speicher-Buckets erfolgreich war:

firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());