Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Unit-Tests erstellen

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

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 der Konfigurationen Ihrer Firebase-Sicherheitsregeln. 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 Einheitentests für Ihre App helfen, die Ihre Regeln validieren.

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

Bevor Sie den Emulator ausführen

Beachten Sie Folgendes, bevor Sie mit der Verwendung des Emulators beginnen:

  • Der Emulator lädt zunächst 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' 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 das Mocking auth in Security Rules, wodurch Komponententests viel einfacher werden. Darüber hinaus unterstützt die Bibliothek einige emulatorspezifische Funktionen wie das Löschen aller Daten, wie unten aufgeführt.
  • Die Emulatoren akzeptieren auch Produktions-Firebase-Authentifizierungstoken, die über Client-SDKs bereitgestellt werden, und werten die Regeln entsprechend aus, sodass Ihre Anwendung in Integrations- und manuellen Tests direkt mit den Emulatoren verbunden werden kann.

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 Benutzer ohne Administratorrechte weder lesen noch schreiben können.
  • Jede emulierte Datenbank wendet die Limits und Kontingente des Spark-Plans an (insbesondere begrenzt dies jede Instanz auf 100 gleichzeitige Verbindungen).
  • Jede Datenbank akzeptiert die Zeichenfolge "owner" als Admin-Authentifizierungstoken.
  • Die Emulatoren haben derzeit keine funktionierenden Interaktionen mit anderen Firebase-Produkten. Insbesondere funktioniert der normale Ablauf der Firebase-Authentifizierung nicht. Stattdessen können Sie die initializeTestApp() Methode in der rules-unit-testing Bibliothek verwenden, die ein auth . Das mit dieser Methode erstellte Firebase-Objekt verhält sich so, als hätte es sich erfolgreich als die von Ihnen bereitgestellte Entität authentifiziert. Wenn Sie null übergeben, verhält es sich wie ein nicht authentifizierter Benutzer ( auth != null -Regeln schlagen beispielsweise fehl).

Interaktion mit dem Realtime Database-Emulator

Auf eine Produktionsinstanz der Firebase-Echtzeitdatenbank kann über eine Unterdomäne von firebaseio.com werden, und Sie können wie folgt 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. 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 dem JavaScript-SDK der Version 9 als auch mit dem SDK der Version 8. Die Bibliotheks-APIs unterscheiden sich erheblich. Wir empfehlen die v9-Testbibliothek, die optimierter ist und weniger Setup erfordert, um eine Verbindung zu Emulatoren herzustellen und so die versehentliche Verwendung von Produktionsressourcen sicher 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 mit dem lokal ausgeführten Emulator zu interagieren. Wenn Sie Zeitüberschreitungen oder ECONNREFUSED -Fehler erhalten, überprüfen Sie, ob der Emulator tatsächlich ausgeführt wird.

Wir empfehlen dringend, eine aktuelle Version von Node.js zu verwenden, damit Sie die async/await Notation verwenden können. Fast das gesamte Verhalten, das Sie möglicherweise testen möchten, umfasst asynchrone Funktionen, und das Testmodul ist so konzipiert, dass es mit Promise-basiertem Code funktioniert.

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

Sie importieren die Bibliothek mit modularen v9-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 bequemen Methode, mit der Sie sie vorübergehend umgehen können, RulesTestEnvironment.withSecurityRulesDisabled .
  • Einrichten von Test-Suite und Pro-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 mit RulesTestEnvironment.authenticatedContext und RulesTestEnvironment.unauthenticatedContext .

Gängige Methoden und Hilfsfunktionen

Siehe auch emulatorspezifische Testmethoden im v9 SDK .

initializeTestEnvironment() => RulesTestEnvironment

Diese Funktion initialisiert eine Testumgebung für das Testen von Regeleinheiten. 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. Anfragen, die über den zurückgegebenen Kontext erstellt werden, haben ein Schein-Authentifizierungstoken angehängt. Übergeben Sie optional ein Objekt, das benutzerdefinierte Ansprüche oder Außerkraftsetzungen 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 per Authentifizierung angemeldet ist. Anforderungen, die über den zurückgegebenen Kontext erstellt wurden, sind keine Firebase-Authentifizierungstoken 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 wären Sicherheitsregeln deaktiviert.

Diese Methode verwendet eine Callback-Funktion, die den Sicherheitsregeln umgehenden Kontext übernimmt und ein Versprechen zurückgibt. Der Kontext wird zerstört, sobald das Promise aufgelöst/zurückgewiesen wird.

RulesTestEnvironment.cleanup()

Diese Methode zerstört alle RulesTestContexts , die in der Testumgebung erstellt wurden, und bereinigt die zugrunde liegenden Ressourcen, wodurch ein sauberes Beenden ermöglicht wird.

Diese Methode ändert den Status von Emulatoren in keiner Weise. 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 Testfall-Utility-Funktion.

Die Funktion bestätigt, dass das bereitgestellte Versprechen, das einen Emulatorvorgang umschließt, ohne Verletzungen der Sicherheitsregeln aufgelöst wird.

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

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

Dies ist eine Testfall-Utility-Funktion.

Die Funktion bestätigt, dass das bereitgestellte Promise Wrapping einer Emulatoroperation mit einer Verletzung der Sicherheitsregeln abgelehnt wird.

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

Emulatorspezifische Methoden

Siehe auch allgemeine Testmethoden und Hilfsfunktionen im v9 SDK .

Cloud-Firestore

Cloud-Firestore

RulesTestEnvironment.clearFirestore() => Promise<void>

Diese Methode löscht Daten in der Firestore-Datenbank, 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 (v9 modular oder v9 kompatibel) verwendet werden.

Echtzeit-Datenbank

Echtzeit-Datenbank

RulesTestEnvironment.clearDatabase() => Promise<void>

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

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 (v9 modular oder v9 kompatibel) 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 zu der 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. Gibt, falls angegeben, eine Speicherinstanz für eine emulierte Version des Bucket-Namens zurück.

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

Wählen Sie ein Produkt aus, um die Methoden anzuzeigen, die vom Firebase Test SDK für die Schnittstelle 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 Authentifizierungsvariablen entspricht. Verwenden Sie dies, um eine App zu erstellen, die als ein bestimmter Benutzer authentifiziert ist, um sie in Tests zu verwenden.

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

initializeAdminApp({ projectId: string }) => FirebaseApp

Diese Methode gibt eine initialisierte Firebase-Admin-App zurück. Diese App umgeht Sicherheitsregeln beim Lesen und Schreiben. Verwenden Sie dies, um eine App zu erstellen, die als Administrator authentifiziert ist, 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 nimmt 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 Promise zurück, das abgelehnt wird, wenn die Eingabe erfolgreich ist, oder das erfolgreich ist, wenn die Eingabe abgelehnt wird. Verwenden Sie dies, um zu bestätigen, wenn ein Datenbank-Lese- oder -Schreibvorgang fehlschlägt.

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

assertSucceeds(pr: Promise) => Promise

Diese Methode gibt ein Promise zurück, das erfolgreich ist, wenn die Eingabe erfolgreich ist, und abgelehnt wird, wenn die Eingabe abgelehnt wird. Verwenden Sie dies, um zu bestätigen, ob ein Datenbank-Lese- oder -Schreibvorgang erfolgreich ist.

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

clearFirestoreData({ projectId: string }) => Promise

Diese Methode löscht alle Daten, die einem bestimmten Projekt in der lokal ausgeführten Firestore-Instanz zugeordnet sind. Verwenden Sie diese Methode zur Reinigung nach Tests.

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

Echtzeit-Datenbank

Echtzeit-Datenbank

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

Verwenden Sie dies, um eine App zu erstellen, die als ein bestimmter Benutzer authentifiziert ist, um sie in Tests zu verwenden.

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

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

Verwenden Sie dies, um eine App zu erstellen, die als Administrator authentifiziert ist, 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 Promise 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 Datenbank-Lese- oder -Schreibvorgang fehlschlägt:

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

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.

Verwenden Sie dies, um zu bestätigen, dass ein Datenbank-Lese- oder -Schreibvorgang erfolgreich ist:

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

Cloud-Speicher

Cloud-Speicher

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

Verwenden Sie dies, um eine App zu erstellen, die als ein bestimmter Benutzer authentifiziert ist, um sie in Tests zu verwenden.

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

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

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

Gibt eine initialisierte Admin-Firebase-App zurück, die dem in den Optionen angegebenen Storage-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 lokal verwaltete Speicher-Buckets. Akzeptiert ein Optionsobjekt, das Ihren "storageBucket" und Ihre "Regeln" 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 Promise 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 Promise 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 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 anzuzeigen, die vom Firebase Test SDK für die Schnittstelle 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 Authentifizierungsvariablen entspricht. Verwenden Sie dies, um eine App zu erstellen, die als ein bestimmter Benutzer authentifiziert ist, um sie in Tests zu verwenden.

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

initializeAdminApp({ projectId: string }) => FirebaseApp

Diese Methode gibt eine initialisierte Firebase-Admin-App zurück. Diese App umgeht Sicherheitsregeln beim Lesen und Schreiben. Verwenden Sie dies, um eine App zu erstellen, die als Administrator authentifiziert ist, 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 nimmt 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 Promise zurück, das abgelehnt wird, wenn die Eingabe erfolgreich ist, oder das erfolgreich ist, wenn die Eingabe abgelehnt wird. Verwenden Sie dies, um zu bestätigen, wenn ein Datenbank-Lese- oder -Schreibvorgang fehlschlägt.

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

assertSucceeds(pr: Promise) => Promise

Diese Methode gibt ein Promise zurück, das erfolgreich ist, wenn die Eingabe erfolgreich ist, und abgelehnt wird, wenn die Eingabe abgelehnt wird. Verwenden Sie dies, um zu bestätigen, ob ein Datenbank-Lese- oder -Schreibvorgang erfolgreich ist.

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

clearFirestoreData({ projectId: string }) => Promise

Diese Methode löscht alle Daten, die einem bestimmten Projekt in der lokal ausgeführten Firestore-Instanz zugeordnet sind. Verwenden Sie diese Methode zur Reinigung nach Tests.

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

Echtzeit-Datenbank

Echtzeit-Datenbank

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

Verwenden Sie dies, um eine App zu erstellen, die als ein bestimmter Benutzer authentifiziert ist, um sie in Tests zu verwenden.

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

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

Verwenden Sie dies, um eine App zu erstellen, die als Administrator authentifiziert ist, 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 Promise 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 Datenbank-Lese- oder -Schreibvorgang fehlschlägt:

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

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.

Verwenden Sie dies, um zu bestätigen, dass ein Datenbank-Lese- oder -Schreibvorgang erfolgreich ist:

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

Cloud-Speicher

Cloud-Speicher

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

Verwenden Sie dies, um eine App zu erstellen, die als ein bestimmter Benutzer authentifiziert ist, um sie in Tests zu verwenden.

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

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

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

Gibt eine initialisierte Admin-Firebase-App zurück, die dem in den Optionen angegebenen Storage-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 lokal verwaltete Speicher-Buckets. Akzeptiert ein Optionsobjekt, das Ihren "storageBucket" und Ihre "Regeln" 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 Promise 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 Promise 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 ist:

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