Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Unit-Tests erstellen

Die Firebase Local Emulator Suite erleichtert die voll Ihre App zu validieren Funktionen und Verhalten . 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 Komponententests für Ihre App helfen, die Ihre Regeln validieren.

Wenn Sie nicht bereits haben, die Firebase Emulatoren einrichten .

Bevor Sie den Emulator ausführen

Beachten Sie Folgendes, bevor Sie den Emulator verwenden:

  • Der Emulator lädt zunächst die angegebenen Regeln in dem firestore.rules oder ‚storage.rules‘ Feld Ihrer firebase.json Datei. Wenn die Datei nicht existiert und Sie verwenden nicht die loadFirestoreRules oder ‚loadStorageRules‘ Verfahren , wie unten beschrieben, der Emulator behandelt alle Projekte als offene Regeln haben.
  • Während der meisten Firebase SDKs Arbeit mit den Emulatoren direkt nur die @firebase/rules-unit-testing Bibliothek unterstützt spöttische auth in Sicherheitsregeln, so dass Unit - Tests viel einfacher. 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-Authentifizierungstokens für die Produktion und werten die Regeln entsprechend aus, sodass Ihre Anwendung bei Integrations- und manuellen Tests direkt mit den Emulatoren verbunden werden kann.

Unterschiede zwischen den Datenbankemulatoren und der Produktion

  • Sie müssen keine Datenbankinstanz explizit anlegen. 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 Spark - Programm Grenzen und Quoten (vor allem, diese Grenzen jede Instanz zu 100 gleichzeitigen Verbindungen).
  • Jede Datenbank wird die Zeichenfolge akzeptieren "owner" als Admin Auth - Token.
  • 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 Verwendung initializeTestApp() Methode in der rules-unit-testing - Bibliothek, die eine nimmt auth Feld. Das mit dieser Methode erstellte Firebase-Objekt verhält sich so, als ob es sich erfolgreich als jede von Ihnen bereitgestellte Entität authentifiziert hätte. Wenn Sie in geben null , wird es als nicht authentifizierter Benutzer verhalten ( auth != null Regeln werden fehlschlagen, zum Beispiel).

Interaktion mit dem Echtzeit-Datenbank-Emulator

Eine Produktion Firebase Realtime - Datenbank - Instanz auf einer Subdomain von zugänglichen firebaseio.com , und Sie können den Rest api wie folgt zugreifen:

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

Der Emulator läuft lokal und ist verfügbar unter localhost:9000 . Für die Interaktion mit einer bestimmten Datenbankinstanz, müssen Sie die Verwendung ns Abfrageparameter an den Datenbanknamen angeben.

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 sowohl mit dem JavaScript-SDK der Version 9 als auch mit dem SDK der Version 8 eine Unit-Testing-Bibliothek für Sicherheitsregeln. Die Bibliotheks-APIs unterscheiden sich erheblich. Wir empfehlen die v9-Testbibliothek, die schlanker 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, fahren wir fort , die machen v8 Test Bibliothek zur Verfügung .

Verwenden Sie die @firebase/rules-unit-testing Modul interagieren mit dem Emulator, läuft lokal. Wenn Sie erhalten Timeouts oder ECONNREFUSED Fehler, überprüfen Sie, dass der Emulator tatsächlich ausgeführt wird .

Wir empfehlen dringend , eine aktuelle Version von Node.js verwenden , so dass Sie verwenden können , async/await Notation. Fast das gesamte Verhalten, das Sie möglicherweise testen möchten, umfasst asynchrone Funktionen, und das Testmodul wurde für die Arbeit mit Promise-basiertem Code entwickelt.

Die v9 Rules Unit Testing Library kennt die Emulatoren immer und greift niemals Ihre Produktionsressourcen an.

Sie importieren die Bibliothek mithilfe modularer Importanweisungen von v9. 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 von RulesTestEnvironment mit einem Aufruf an initializeTestEnvironment .
  • Einrichten von Testdaten ohne Auslösung Regeln, eine bequeme Methode , die Sie vorübergehend Bypass ihnen erlaubt, RulesTestEnvironment.withSecurityRulesDisabled .
  • Einrichten von Testsuite und pro-Test vor / nach dem Haken mit Anruf Testdaten zu bereinigen und Umwelt, wie RulesTestEnvironment.cleanup() oder RulesTestEnvironment.clearFirestore() .
  • Die Implementierung von Testfällen , dass Mimik Authentifizierung Zustände mit RulesTestEnvironment.authenticatedContext und RulesTestEnvironment.unauthenticatedContext .

Gängige Methoden und Hilfsfunktionen

Siehe auch Emulator spezifische Testmethoden in der v9 SDK .

initializeTestEnvironment() => RulesTestEnvironment

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

Die Funktion übernimmt ein optionales Objekt definiert eine TestEnvironmentConfig , die aus einem Projekt - ID und Emulators Konfigurationseinstellungen bestehen können.

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

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

Dieses Verfahren erzeugt eine RulesTestContext , die verhält sich wie ein Authentifizierungs Benutzer authentifiziert. Anforderungen, die über den zurückgegebenen Kontext erstellt werden, haben ein angehängtes Schein-Authentifizierungstoken. Übergeben Sie optional ein Objekt, das benutzerdefinierte Ansprüche oder Überschreibungen für Authentifizierungstoken-Nutzlasten definiert.

Benutzen Sie das zurückgegebene Testkontextobjekt in Ihren Tests für den Zugriff alle Emulator Instanzen konfiguriert, einschließlich derjenigen , konfiguriert mit initializeTestEnvironment .

// Assuming a Firestore app and the Firestore emulator for this example
import { setDoc } from "firebase/firestore";

const alice = testEnv.authenticatedContext("alice", { … });
// Use the Firestore instance associated with this context
await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });

RulesTestEnvironment.unauthenticatedContext() => RulesTestContext

Dieses Verfahren erzeugt eine RulesTestContext , die verhält sich wie ein Client, der in über Authentifizierung nicht angemeldet ist. An Anfragen, die über den zurückgegebenen Kontext erstellt werden, werden keine Firebase Auth-Token angehängt.

Benutzen Sie das zurückgegebene Testkontextobjekt in Ihren Tests für den Zugriff alle Emulator Instanzen konfiguriert, einschließlich derjenigen , konfiguriert mit initializeTestEnvironment .

// Assuming a Cloud Storage app and the Storage emulator for this example
import { getStorage, ref, deleteObject } from "firebase/storage";

const alice = testEnv.unauthenticatedContext();

// Use the Cloud Storage instance associated with this context
const desertRef = ref(alice.storage(), 'images/desert.jpg');
await assertSucceeds(deleteObject(desertRef));

RulesTestEnvironment.withSecurityRulesDisabled()

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

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

RulesTestEnvironment.cleanup()

Dieses Verfahren zerstört alle RulesTestContexts in der Testumgebung erstellt und die zugrunde liegenden Ressourcen bereinigt, einen sauberen Ausgang ermöglicht.

Diese Methode ändert den Status von Emulatoren in keiner Weise. Verwenden Sie zum Zurücksetzen von Daten zwischen Tests die anwendungsemulatorspezifische Methode zum Löschen von Daten.

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

Dies ist eine Testfall-Hilfsfunktion.

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-Hilfsfunktion.

Die Funktion bestätigt, dass das bereitgestellte Promise, das einen Emulatorvorgang umschließt, mit einer Verletzung der Sicherheitsregeln abgelehnt wird.

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

Emulatorspezifische Methoden

Siehe auch gemeinsame Testmethoden und Utility - Funktionen im v9 SDK .

Cloud Firestore

Cloud Firestore

RulesTestEnvironment.clearFirestore() => Promise<void>

Dieses Verfahren löscht Daten in der Datenbank , die Firestore zu dem gehört projectId konfiguriert für den Emulator Firestore.

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 compat) verwendet werden.

Echtzeit-Datenbank

Echtzeit-Datenbank

RulesTestEnvironment.clearDatabase() => Promise<void>

Dieses Verfahren löscht Daten in der Echtzeit - Datenbank , die zu dem gehört projectId konfiguriert für den Echtzeit - Datenbank - Emulator.

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 (v9 modular oder v9 compat) 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-Speicher

Cloud-Speicher

RulesTestEnvironment.clearStorage() => Promise<void>

Dieses Verfahren löscht Objekte und die Metadaten in Eimern Speicher zum gehör projectId für den Cloud Storage Emulator konfiguriert.

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 ein gs:// URL zum Firebase Speicher Bucket zum Testen. Gibt, falls angegeben, eine Storage-Instanz 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 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 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-Administrator-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 derzeit initialisiert Test und Admin - Anwendungen. 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 ausgeführte Datenbank. Es benötigt ein Objekt, das die Regeln als String 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 wird abgelehnt, 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 zum Aufräumen 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 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. Nimmt ein Optionsobjekt, das Ihren "databaseName" und Ihre "Regeln" als Strings 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 das Beenden von JavaScript verhindern):

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

assertFails(pr: Promise) => Promise

Gibt eine Zusage zurück, die 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 eine Zusage zurück, die erfolgreich ist, wenn die Eingabe erfolgreich ist, und wird abgelehnt, 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 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 Storage-Buckets festzulegen.

Sendet Regeln an lokal verwaltete Speicher-Buckets. Nimmt ein Optionsobjekt, das Ihren "storageBucket" und Ihre "Regeln" als Strings 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 das Beenden von JavaScript verhindern):

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

assertFails(pr: Promise) => Promise

Gibt eine Zusage zurück, die 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 für einen Storage-Bucket fehlschlägt:

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

assertSucceeds(pr: Promise) => Promise

Gibt eine Zusage zurück, die erfolgreich ist, wenn die Eingabe erfolgreich ist, und wird abgelehnt, wenn die Eingabe abgelehnt wird.

Verwenden Sie dies, um zu bestätigen, dass ein Speicher-Bucket-Lese- oder -Schreibvorgang 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 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 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-Administrator-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 derzeit initialisiert Test und Admin - Anwendungen. 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 ausgeführte Datenbank. Es benötigt ein Objekt, das die Regeln als String 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 wird abgelehnt, 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 zum Aufräumen 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 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. Nimmt ein Optionsobjekt, das Ihren "databaseName" und Ihre "Regeln" als Strings 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 das Beenden von JavaScript verhindern):

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

assertFails(pr: Promise) => Promise

Gibt eine Zusage zurück, die 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 eine Zusage zurück, die erfolgreich ist, wenn die Eingabe erfolgreich ist, und wird abgelehnt, 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 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 Storage-Buckets festzulegen.

Sendet Regeln an lokal verwaltete Speicher-Buckets. Nimmt ein Optionsobjekt, das Ihren "storageBucket" und Ihre "Regeln" als Strings 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 das Beenden von JavaScript verhindern):

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

assertFails(pr: Promise) => Promise

Gibt eine Zusage zurück, die 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 für einen Storage-Bucket fehlschlägt:

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

assertSucceeds(pr: Promise) => Promise

Gibt eine Zusage zurück, die erfolgreich ist, wenn die Eingabe erfolgreich ist, und wird abgelehnt, wenn die Eingabe abgelehnt wird.

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

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