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 Dateifirebase.json
angegeben sind. Wenn die Datei nicht vorhanden ist und Sie die MethodeloadFirestoreRules
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 Mockingauth
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 derrules-unit-testing
Bibliothek verwenden, die einauth
akzeptiert. 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 Sienull
ü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
zugegriffen werden, und Sie können wie folgt auf die REST-API zugreifen:
https://<database_name>.firebaseio.com/path/to/my/data.json
Der Emulator 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 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 voninitializeTestEnvironment
. - 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()
oderRulesTestEnvironment.clearFirestore()
. - Implementieren von Testfällen, die Authentifizierungszustände mit
RulesTestEnvironment.authenticatedContext
undRulesTestEnvironment.unauthenticatedContext
nachahmen.
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());