Build-Einheitentests

Mit den Firebase Local Emulator Suite können Sie die Funktionen und das Verhalten Ihrer App leichter vollständig überprüfen. Es ist auch ein großartiges Tool zum Prüfen Ihrer Firebase Security Rules-Konfigurationen. Verwenden Sie die Firebase-Emulatoren, um Einheitentests in einer lokalen Umgebung auszuführen und zu automatisieren. Die in diesem Dokument beschriebenen Methoden sollten Ihnen beim Erstellen und Automatisieren von Unit-Tests für Ihre App helfen, die Ihre Rules validieren.

Richten Sie die Firebase-Emulatoren ein, falls Sie das noch nicht getan haben.

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 Datenbankemulatoren und 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 Administratorrechte nicht lesen oder schreiben können.
  • Für jede emulierte Datenbank gelten die Limits und Kontingente des Spark-Plans. Insbesondere ist jede Instanz auf 100 gleichzeitige Verbindungen beschränkt.
  • Der String "owner" wird von jeder Datenbank als Administratorauthentifizierungstoken akzeptiert.
  • Die Emulatoren funktionieren derzeit nicht mit anderen Firebase-Produkten. Der normale Firebase Authentication-Ablauf funktioniert nicht. Stattdessen können Sie die Methode initializeTestApp() in der Bibliothek rules-unit-testing verwenden, die ein auth-Feld annimmt. Das mit dieser Methode erstellte Firebase-Objekt verhält sich so, als hätte es sich erfolgreich authentifiziert, unabhängig von der von Ihnen bereitgestellten Entität. 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 Produktionsinstanz von Firebase Realtime Database kann über eine Subdomain von firebaseio.com zugegriffen werden. So greifen Sie auf die REST API zu:

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, geben Sie den Datenbanknamen mit dem Abfrageparameter ns an.

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
  • Einrichtung von Testdaten ohne Auslösung von Rules, indem Sie eine praktische Methode verwenden, mit der Sie diese vorübergehend umgehen können: RulesTestEnvironment.withSecurityRulesDisabled.
  • Einrichten von Testsuite 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 Emulatorspezifische 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

Diese Methode erstellt einen RulesTestContext, der sich wie ein authentifizierter Authentication-Nutzer verhält. Anfragen, die über den zurückgegebenen Kontext erstellt werden, haben ein simuliertes Authentication-Token. Optional können Sie ein Objekt übergeben, das benutzerdefinierte Anforderungen oder Überschreibungen für Authentication-Token-Nutzlasten definiert.

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

// 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 ein RulesTestContext, 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 in Ihren Tests das zurückgegebene Testkontextobjekt, um auf alle konfigurierten Emulatorinstanzen zuzugreifen, einschließlich der mit initializeTestEnvironment konfigurierten Emulatorinstanzen.

// 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 Allgemeine 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 wurde.

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 verwendet werden (modular oder mit Namensbereich, Version 9 oder höher). Die Methode akzeptiert eine URL der Realtime Database-Instanz. Wenn angegeben, wird eine Instanz für eine emulierte Version des Namespace mit Parametern zurückgegeben, die aus der URL extrahiert wurden.

Cloud Storage

Cloud Storage

RulesTestEnvironment.clearStorage() => Promise<void>

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

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 den Test. Wenn angegeben, wird eine Storage-Instanz für eine emulierte Version des Bucket-Namens zurückgegeben.

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 für die Kommunikation mit dem Emulator verwendet werden.

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

Mit dieser Option können Sie eine Anwendung erstellen, die als spezifischer Nutzer für Tests authentifiziert wird.

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

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

Hiermit können Sie eine App erstellen, die als Administrator authentifiziert ist, und den Status für Tests einrichten.

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

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

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

Verwenden Sie diese Methode, um die Regeln Ihrer Datenbank festzulegen.

Sendet Regeln an eine lokal ausgeführte Datenbank. Übernimmt ein Optionsobjekt, das Ihren "databaseName" und Ihre "rules" als Strings angibt.

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

apps() => [FirebaseApp]

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

Damit können Sie Anwendungen zwischen oder nach Tests bereinigen. Beachten Sie, dass initialisierte Anwendungen mit aktiven Listenern das Beenden von JavaScript verhindern:

 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.

So prüfen Sie, ob ein Lese- oder Schreibvorgang einer 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.

Hiermit können Sie feststellen, ob ein Lese- oder Schreibvorgang einer Datenbank erfolgreich ist:

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

Cloud Storage

Cloud Storage

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

Hiermit können Sie eine App erstellen, die als spezifischer Nutzer für Tests authentifiziert ist.

Gibt eine initialisierte Firebase-App zurück, die dem in den Optionen angegebenen Storage-Bucket-Namen und 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 Speicher-Bucket-Namen entspricht. Diese App umgeht Sicherheitsregeln beim Lesen und Schreiben im Bucket.

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

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

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

Regeln werden an lokal verwaltete Speicher-Buckets gesendet. Es wird ein Optionsobjekt verwendet, das „storageBucket“ und „rules“ als Strings angibt.

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

apps() => [FirebaseApp]

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

Damit können Sie Anwendungen zwischen oder nach Tests bereinigen. Beachten Sie, dass initialisierte Anwendungen mit aktiven Listenern das Beenden von JavaScript verhindern:

 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.

Hiermit können Sie feststellen, ob 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 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 Schreibvorgang für einen Speicher-Bucket erfolgreich ist:

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

RUT Library API für JS SDK Version 8

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

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

Mit dieser Option können Sie eine Anwendung erstellen, die als spezifischer Nutzer für Tests authentifiziert wird.

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

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

Hiermit können Sie eine App erstellen, die als Administrator authentifiziert ist, und den Status für Tests einrichten.

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

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

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

Verwenden Sie diese Methode, um die Regeln Ihrer Datenbank festzulegen.

Sendet Regeln an eine lokal ausgeführte Datenbank. Übernimmt ein Optionsobjekt, das Ihren "databaseName" und Ihre "rules" als Strings angibt.

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

apps() => [FirebaseApp]

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

Damit können Sie Anwendungen zwischen oder nach Tests bereinigen. Beachten Sie, dass initialisierte Anwendungen mit aktiven Listenern das Beenden von JavaScript verhindern:

 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.

So prüfen Sie, ob ein Lese- oder Schreibvorgang einer 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.

Hiermit können Sie feststellen, ob ein Lese- oder Schreibvorgang einer Datenbank erfolgreich ist:

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

Cloud Storage

Cloud Storage

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

Hiermit können Sie eine App erstellen, die als spezifischer Nutzer für Tests authentifiziert ist.

Gibt eine initialisierte Firebase-App zurück, die dem in den Optionen angegebenen Storage-Bucket-Namen und 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 Speicher-Bucket-Namen entspricht. Diese App umgeht Sicherheitsregeln beim Lesen und Schreiben im Bucket.

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

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

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

Regeln werden an lokal verwaltete Speicher-Buckets gesendet. Es wird ein Optionsobjekt verwendet, das „storageBucket“ und „rules“ als Strings angibt.

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

apps() => [FirebaseApp]

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

Damit können Sie Anwendungen zwischen oder nach Tests bereinigen. Beachten Sie, dass initialisierte Anwendungen mit aktiven Listenern das Beenden von JavaScript verhindern:

 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.

Hiermit können Sie feststellen, ob 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 Versprechen zurück, das erfolgreich ist, wenn die Eingabe erfolgreich ist, und abgelehnt wird, wenn die Eingabe abgelehnt wird.

So können Sie prüfen, ob Lese- oder Schreibvorgänge für einen Storage-Bucket erfolgreich sind:

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