Build-Einheitentests

Die Firebase Local Emulator Suite erleichtern die vollständige Validierung der Funktionen und des Verhaltens Ihrer App. Es ist auch ein hervorragendes Tool zum Überprüfen Ihrer Firebase Security Rules-Konfigurationen. Mit den Firebase-Emulatoren können Sie Einheitentests in einer lokalen Umgebung ausführen und automatisieren. Die in diesem Dokument beschriebenen Methoden sollen Ihnen beim Erstellen und Automatisieren von Einheitentests für Ihre App helfen, mit denen Sie Ihre Security Rules validieren können.

Richten Sie die Firebase-Emulatoren ein, falls noch nicht geschehen.

Vor dem Starten des Emulators

Für die Verwendung des Emulators ist Folgendes zu beachten:

  • Der Emulator lädt zuerst die Regeln, die im Feld firestore.rules oder storage.rules Ihrer Datei firebase.json angegeben sind. Wenn die Datei nicht vorhanden ist und Sie die Methode loadFirestoreRules oder loadStorageRules wie unten beschrieben nicht verwenden, behandelt der Emulator alle Projekte als solche mit offenen Regeln.
  • Während die meisten Firebase-SDKs direkt mit den Emulatoren arbeiten, unterstützt nur die @firebase/rules-unit-testing-Bibliothek das Mocking von auth in den Sicherheitsregeln. Das vereinfacht die Unittests. Darüber hinaus unterstützt die Bibliothek einige Emulator-spezifische Funktionen wie das Löschen aller Daten, wie unten aufgeführt.
  • Die Emulatoren akzeptieren auch Firebase-Auth-Produktionstoken, die über Client-SDKs bereitgestellt werden, und werten die Regeln entsprechend aus. Dadurch kann Ihre Anwendung bei Integrations- und manuellen Tests direkt mit den Emulatoren verbunden werden.

Unterschiede zwischen den Datenbankemulatoren und der Produktion

  • Sie müssen keine Datenbankinstanz explizit erstellen. Der Emulator erstellt automatisch jede Datenbankinstanz, auf die zugegriffen wird.
  • Jede neue Datenbank wird mit geschlossenen Regeln gestartet, sodass Nutzer ohne Administratorberechtigung nicht lesen oder schreiben können.
  • Für jede emulierte Datenbank gelten die Limits und Kontingente des Spark-Tarifs. Das bedeutet insbesondere, dass jede Instanz auf 100 gleichzeitige Verbindungen beschränkt ist.
  • Jede Datenbank akzeptiert den String "owner" als Admin-Authentifizierungstoken.
  • Die Emulatoren können derzeit nicht mit anderen Firebase-Produkten interagieren. Der normale Firebase Authentication-Ablauf funktioniert nicht. Stattdessen können Sie die Methode initializeTestApp() in der rules-unit-testing-Bibliothek verwenden, die ein auth-Feld akzeptiert. Das mit dieser Methode erstellte Firebase-Objekt verhält sich so, als ob es sich erfolgreich als die von Ihnen angegebene Identität authentifiziert hätte. Wenn Sie null übergeben, verhält es sich wie ein nicht authentifizierter Nutzer (auth != null-Regeln schlagen zum Beispiel fehl).

Mit dem Realtime Database-Emulator interagieren

Auf eine Firebase-Realtime Database-Produktionsinstanz kann über eine Subdomain von firebaseio.com zugegriffen werden. So können Sie auf die REST API zugreifen:

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

Der Emulator wird lokal ausgeführt und ist unter localhost:9000 verfügbar. Wenn Sie mit einer bestimmten Datenbankinstanz interagieren möchten, müssen Sie den Datenbanknamen mit dem Abfrageparameter ns angeben.

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

Lokale Unittests mit dem JavaScript-SDK der Version 9 ausführen

Firebase bietet sowohl mit dem JavaScript-SDK der Version 9 als auch mit dem SDK der Version 8 eine Unittest-Bibliothek für Sicherheitsregeln an. Die Bibliotheks-APIs unterscheiden sich erheblich. Wir empfehlen die v9-Testbibliothek, die optimiert ist und weniger Einrichtungsschritte erfordert, um eine Verbindung zu Emulatoren herzustellen und daher versehentliche Verwendung von Produktionsressourcen zu vermeiden. 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 den Emulator anzusprechen, der lokal ausgeführt wird. Wenn Zeitüberschreitungen oder ECONNREFUSED-Fehler auftreten, prüfen Sie, ob der Emulator tatsächlich ausgeführt wird.

Es wird dringend empfohlen, eine aktuelle Version von Node.js zu verwenden, damit Sie die async/await-Notation verwenden können. Fast das gesamte Verhalten, das Sie testen möchten, umfasst asynchrone Funktionen. Das Testmodul ist für die Verwendung mit Promise-basiertem Code ausgelegt.

Die v9-Regeln Einheitentest Bibliothek kennt immer die Emulatoren und greift niemals auf Ihre Produktionsressourcen zu.

Sie importieren die Bibliothek mithilfe von modularen v9-Importanweisungen. Beispiel:

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.

Nach dem Import umfasst das Implementieren von Unittest Folgendes:

  • RulesTestEnvironment mit einem Aufruf von initializeTestEnvironment erstellen und konfigurieren
  • Testdaten einrichten, ohne Security Rules auszulösen, indem Sie eine Hilfsmethode verwenden, mit der Sie sie vorübergehend umgehen können: RulesTestEnvironment.withSecurityRulesDisabled.
  • Einrichten von Test-Suite und Pro-Test vor/nach Hooks mit Aufrufen zur Bereinigung von Testdaten und -umgebungen, z. B. RulesTestEnvironment.cleanup() oder RulesTestEnvironment.clearFirestore().
  • Testfälle implementieren, die Authentifizierungsstatus mit RulesTestEnvironment.authenticatedContext und RulesTestEnvironment.unauthenticatedContext nachahmen

Gängige Methoden und Dienstfunktionen

Weitere Informationen finden Sie unter Emulator-spezifische Testmethoden mit der modularen API.

initializeTestEnvironment() => RulesTestEnvironment

Diese Funktion initialisiert eine Testumgebung für Regel-Unittest. Rufen Sie diese Funktion zuerst zum Testen der Einrichtung 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 Einstellungen für die Emulatorkonfiguration 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

Mit dieser Methode wird ein RulesTestContext erstellt, das sich wie ein authentifizierter Authentication-Nutzer verhält. Anfragen, die über den zurückgegebenen Kontext erstellt werden, enthalten ein Mock-Authentication-Token. Optional können Sie ein Objekt übergeben, das benutzerdefinierte Ansprüche oder Überschreibungen für Authentication-Token-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().doc('/users/alice'), { ... });

RulesTestEnvironment.unauthenticatedContext() => RulesTestContext

Mit dieser Methode wird ein RulesTestContext erstellt, das sich wie ein Client verhält, der nicht über Authentication angemeldet ist. An Anfragen, die über den zurückgegebenen Kontext erstellt werden, werden keine Firebase Auth-Token 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 Testeinrichtungsfunktion mit einem Kontext aus, der sich so verhält, als seien die Sicherheitsregeln deaktiviert.

Diese Methode verwendet eine Callback-Funktion, die den Kontext verwendet, der Sicherheitsregeln umgeht, und die ein Promise zurückgibt. Der Kontext wird gelöscht, sobald das Promise aufgelöst oder abgelehnt wird.

RulesTestEnvironment.cleanup()

Diese Methode löscht alle RulesTestContexts, die in der Testumgebung erstellt wurden, und bereinigt die zugrunde liegenden Ressourcen, was einen sauberen Beendigung ermöglicht.

Diese Methode ändert den Status der Emulatoren nicht. Verwenden Sie die Methode für spezifische Daten des Anwendungsemulators, um Daten zwischen Tests zurückzusetzen.

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

Dies ist eine Dienstfunktion für Testläufe.

Die Funktion bestätigt, dass der bereitgestellte Promise, der einen Emulator-Vorgang verpackt, ohne Verstöße gegen Sicherheitsregeln aufgelöst wird.

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

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

Dies ist eine Dienstfunktion für Testläufe.

Die Funktion bestätigt, dass der bereitgestellte Promise, der einen Emulator-Vorgang verpackt, mit einem Verstoß gegen Sicherheitsregeln abgelehnt wird.

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

Emulator-spezifische Methoden

Weitere Informationen finden Sie unter Häufige Testmethoden und Dienstfunktionen mit der modularen API.

Cloud Firestore

Cloud Firestore

RulesTestEnvironment.clearFirestore() => Promise<void>

Mit dieser Methode werden Daten in der Firestore-Datenbank gelöscht, die zu der 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 verwendet werden (v9 modular oder v9 compat).

Realtime Database

Realtime Database

RulesTestEnvironment.clearDatabase() => Promise<void>

Mit dieser Methode werden Daten im Realtime Database gelöscht, die zum projectId gehören, der für den Realtime Database-Emulator konfiguriert ist.

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

Rufen Sie eine Realtime Database-Instanz 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. Gibt, falls angegeben, eine Instanz für eine emulierte Version des Namespace mit aus der URL extrahierten Parametern zurück.

Cloud Storage

Cloud Storage

RulesTestEnvironment.clearStorage() => Promise<void>

Mit dieser Methode werden Objekte und Metadaten in Speicher-Buckets gelöscht, die zur projectId gehören, die für den Cloud Storage-Emulator konfiguriert ist.

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

Diese Methode gibt eine Storage-Instanz zurück, die für die Verbindung zum Emulator konfiguriert ist. Die Methode akzeptiert eine gs://-URL zum Firebase Storage-Bucket für Tests. Gibt, falls angegeben, eine Storage-Instanz für eine emulierte Version des Bucket-Namens zurück.

Lokale Unittests mit dem v8 JavaScript SDK ausführen

Wählen Sie ein Produkt aus, um die Methoden zu sehen, die vom Firebase Test SDK verwendet werden, um mit dem Emulator zu interagieren.

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 den Autorisierungsvariablen entspricht. Mit dieser Option können Sie eine Anwendung erstellen, die als spezifischer Nutzer für Tests authentifiziert wird.

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

initializeAdminApp({ projectId: string }) => FirebaseApp

Diese Methode liefert eine initialisierte Firebase App für Administratoren. Die Anwendung umgeht Sicherheitsregeln beim Ausführen von Lese- und Schreibvorgängen. Hiermit erstellen Sie eine Anwendung, die als Administrator authentifiziert wird, um den Status für Tests festzulegen.

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

apps() => [FirebaseApp] Diese Methode liefert alle derzeit initialisierten Test- und Administrator-Apps. Hiermit können Sie Apps zwischen oder nach Tests bereinigen.

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

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

Diese Methode sendet Regeln an eine lokal ausgeführte Datenbank. Sie verwendet ein Objekt, das die Regeln als String festlegt. 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 erfolgreich ist, wenn die Eingabe abgelehnt wird. Hiermit können Sie feststellen, ob ein Lese- oder Schreibvorgang einer 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. Hiermit können Sie feststellen, ob ein Lese- oder Schreibzugriff auf eine Datenbank erfolgreich ist.

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

clearFirestoreData({ projectId: string }) => Promise

Mit dieser Methode werden alle Daten gelöscht, die mit einem bestimmten Projekt in der lokal ausgeführten Firestore-Instanz verknüpft sind. Verwenden Sie diese Methode zur Bereinigung nach Tests.

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

Realtime Database

Realtime Database

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

Hiermit erstellen Sie eine Anwendung, die als bestimmter Nutzer authentifiziert wird, um sie in Tests zu verwenden.

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

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

Hiermit erstellen Sie eine Anwendung, die als Administrator authentifiziert wird, um den Status für Tests festzulegen.

Gibt eine initialisierte Firebase-App für Administratoren 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

Damit können Sie die Regeln für Ihre Datenbank festlegen.

Sendet Regeln an eine lokal ausgeführte Datenbank. Akzeptiert ein Optionenobjekt, in dem „databaseName“ und „rules“ als Strings angegeben werden.

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

apps() => [FirebaseApp]

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

Damit können Sie Apps zwischen oder nach Tests bereinigen. Hinweis: Initialisierte Apps mit aktiven Listenern verhindern, dass JavaScript beendet wird:

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

assertFails(pr: Promise) => Promise

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

Hiermit können Sie feststellen, ob ein Lese- oder Schreibvorgang einer Datenbank fehlschlägt:

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

assertSucceeds(pr: Promise) => Promise

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

Verwenden Sie diesen Befehl, um zu bestätigen, dass ein Datenbanklese- oder ‑schreibvorgang erfolgreich ist:

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

Cloud Storage

Cloud Storage

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

Hiermit erstellen Sie eine Anwendung, die als bestimmter Nutzer authentifiziert wird, um sie in Tests zu verwenden.

Gibt eine initialisierte Firebase-App zurück, die dem in den Optionen angegebenen Namen des Storage-Buckets und der Überschreibung der Autorisierungsvariablen entspricht.

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

Hiermit erstellen Sie eine Anwendung, die als Administrator authentifiziert wird, um den Status für Tests festzulegen.

Gibt eine initialisierte Firebase-App für Administratoren zurück, die dem in den Optionen angegebenen Namen des Storage-Buckets entspricht. Diese App umgeht Sicherheitsregeln beim Lesen und Schreiben in den Bucket.

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

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

Damit legen Sie die Regeln für Ihren Speicher-Bucket fest.

Sendet Regeln an lokal verwaltete Storage-Buckets. Akzeptiert ein Optionenobjekt, in dem „storageBucket“ und „rules“ als Strings angegeben werden.

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

apps() => [FirebaseApp]

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

Damit können Sie Apps zwischen oder nach Tests bereinigen. Hinweis: Initialisierte Apps mit aktiven Listenern verhindern, dass JavaScript beendet wird:

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

assertFails(pr: Promise) => Promise

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

Damit können Sie bestätigen, dass ein Lese- oder Schreibvorgang für einen Speicher-Bucket fehlschlägt:

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

assertSucceeds(pr: Promise) => Promise

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

Hiermit können Sie bestätigen, dass ein Lese- oder Schreibvorgang eines Storage-Buckets erfolgreich ist:

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 zu sehen, die vom Firebase Test SDK verwendet werden, um mit dem Emulator zu interagieren.

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 den Autorisierungsvariablen entspricht. Mit dieser Option können Sie eine Anwendung erstellen, die als spezifischer Nutzer für Tests authentifiziert wird.

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

initializeAdminApp({ projectId: string }) => FirebaseApp

Diese Methode liefert eine initialisierte Firebase App für Administratoren. Die Anwendung umgeht Sicherheitsregeln beim Ausführen von Lese- und Schreibvorgängen. Hiermit erstellen Sie eine Anwendung, die als Administrator authentifiziert wird, um den Status für Tests festzulegen.

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

apps() => [FirebaseApp] Diese Methode liefert alle derzeit initialisierten Test- und Administrator-Apps. Hiermit können Sie Apps zwischen oder nach Tests bereinigen.

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

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

Diese Methode sendet Regeln an eine lokal ausgeführte Datenbank. Sie verwendet ein Objekt, das die Regeln als String festlegt. 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 erfolgreich ist, wenn die Eingabe abgelehnt wird. Hiermit können Sie feststellen, ob ein Lese- oder Schreibvorgang einer 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. Hiermit können Sie feststellen, ob ein Lese- oder Schreibzugriff auf eine Datenbank erfolgreich ist.

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

clearFirestoreData({ projectId: string }) => Promise

Mit dieser Methode werden alle Daten gelöscht, die mit einem bestimmten Projekt in der lokal ausgeführten Firestore-Instanz verknüpft sind. Verwenden Sie diese Methode zur Bereinigung nach Tests.

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

Realtime Database

Realtime Database

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

Hiermit erstellen Sie eine Anwendung, die als bestimmter Nutzer authentifiziert wird, um sie in Tests zu verwenden.

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

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

Hiermit erstellen Sie eine Anwendung, die als Administrator authentifiziert wird, um den Status für Tests festzulegen.

Gibt eine initialisierte Firebase-App für Administratoren 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

Damit können Sie die Regeln für Ihre Datenbank festlegen.

Sendet Regeln an eine lokal ausgeführte Datenbank. Akzeptiert ein Optionenobjekt, in dem „databaseName“ und „rules“ als Strings angegeben werden.

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

apps() => [FirebaseApp]

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

Damit können Sie Apps zwischen oder nach Tests bereinigen. Hinweis: Initialisierte Apps mit aktiven Listenern verhindern, dass JavaScript beendet wird:

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

assertFails(pr: Promise) => Promise

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

Hiermit können Sie feststellen, ob ein Lese- oder Schreibvorgang einer Datenbank fehlschlägt:

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

assertSucceeds(pr: Promise) => Promise

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

Verwenden Sie diesen Befehl, um zu bestätigen, dass ein Datenbanklese- oder ‑schreibvorgang erfolgreich ist:

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

Cloud Storage

Cloud Storage

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

Hiermit erstellen Sie eine Anwendung, die als bestimmter Nutzer authentifiziert wird, um sie in Tests zu verwenden.

Gibt eine initialisierte Firebase-App zurück, die dem in den Optionen angegebenen Namen des Storage-Buckets und der Überschreibung der Autorisierungsvariablen entspricht.

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

Hiermit erstellen Sie eine Anwendung, die als Administrator authentifiziert wird, um den Status für Tests festzulegen.

Gibt eine initialisierte Firebase-App für Administratoren zurück, die dem in den Optionen angegebenen Namen des Storage-Buckets entspricht. Diese App umgeht Sicherheitsregeln beim Lesen und Schreiben in den Bucket.

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

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

Damit legen Sie die Regeln für Ihren Speicher-Bucket fest.

Sendet Regeln an lokal verwaltete Storage-Buckets. Akzeptiert ein Optionenobjekt, in dem „storageBucket“ und „rules“ als Strings angegeben werden.

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

apps() => [FirebaseApp]

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

Damit können Sie Apps zwischen oder nach Tests bereinigen. Hinweis: Initialisierte Apps mit aktiven Listenern verhindern, dass JavaScript beendet wird:

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

assertFails(pr: Promise) => Promise

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

Damit können Sie bestätigen, dass ein Lese- oder Schreibvorgang für einen Speicher-Bucket fehlschlägt:

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

assertSucceeds(pr: Promise) => Promise

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

Damit können Sie bestätigen, dass ein Lese- oder Schreibvorgang für einen Speicher-Bucket erfolgreich war:

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