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 Einheitentests für Ihre Anwendung helfen, die Ihre Rules validieren.
Falls noch nicht geschehen, richten Sie die Firebase-Emulatoren ein.
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 Dateifirebase.json
angegeben sind. Wenn die Datei nicht vorhanden ist und Sie die MethodeloadFirestoreRules
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 vonauth
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 Bibliothekrules-unit-testing
verwenden, für die einauth
-Feld verwendet wird. 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 Sienull
ü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, müssen Sie den Datenbanknamen mit dem Abfrageparameter ns
angeben.
http://localhost:9000/path/to/my/data.json?ns=<database_name>
Lokale Unittests mit dem JavaScript SDK der Version 9 ausführen
Firebase bietet sowohl mit dem JavaScript-SDK der Version 9 als auch mit dem SDK der Version 8 eine Unittest-Bibliothek für Sicherheitsregeln an. Die Bibliotheks-APIs unterscheiden sich erheblich. Wir empfehlen die v9-Testbibliothek, die optimiert ist und weniger Einrichtungsschritte erfordert, um eine Verbindung zu Emulatoren herzustellen und daher versehentliche Verwendung von Produktionsressourcen zu vermeiden. Aus Gründen der Abwärtskompatibilität stellen wir weiterhin die v8-Testbibliothek zur Verfügung.
Verwenden Sie das Modul @firebase/rules-unit-testing
, um den Emulator anzusprechen, der lokal ausgeführt wird. Wenn Zeitüberschreitungen oder ECONNREFUSED
-Fehler auftreten, prüfen Sie, ob der Emulator tatsächlich ausgeführt wird.
Es wird dringend empfohlen, eine aktuelle Version von Node.js zu verwenden, damit Sie die async/await
-Notation verwenden können. Fast das gesamte Verhalten, das Sie testen möchten, umfasst asynchrone Funktionen. Das Testmodul ist für die Verwendung mit Promise-basiertem Code ausgelegt.
Die v9-Regeln Einheitentest Bibliothek kennt immer die Emulatoren und greift niemals auf Ihre Produktionsressourcen zu.
Sie importieren die Bibliothek mithilfe von modularen v9-Importanweisungen. Beispiel:
import {
assertFails,
assertSucceeds,
initializeTestEnvironment
} from "@firebase/rules-unit-testing"
// Use `const { … } = require("@firebase/rules-unit-testing")` if imports are not supported
// Or we suggest `const testing = require("@firebase/rules-unit-testing")` if necessary.
Nach dem Import umfasst das Implementieren von Unittest Folgendes:
RulesTestEnvironment
mit einem Aufruf voninitializeTestEnvironment
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()
oderRulesTestEnvironment.clearFirestore()
. - Testfälle implementieren, die Authentifizierungsstatus mit
RulesTestEnvironment.authenticatedContext
undRulesTestEnvironment.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 wurden, sind mit einem Mock-Token vom Typ Authentication verknüpft. Optional können Sie ein Objekt übergeben, das benutzerdefinierte Anforderungen oder Überschreibungen für Authentication-Token-Nutzlasten definiert.
Verwenden Sie das zurückgegebene Testkontextobjekt in Ihren Tests, um auf alle konfigurierten Emulatorinstanzen zuzugreifen, einschließlich der mit initializeTestEnvironment
konfigurierten.
// Assuming a Firestore app and the Firestore emulator for this example import { setDoc } from "firebase/firestore"; const alice = testEnv.authenticatedContext("alice", { … }); // Use the Firestore instance associated with this context await assertSucceeds(setDoc(alice.firestore(), '/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 das zurückgegebene Testkontextobjekt in Ihren Tests, um auf alle konfigurierten Emulatorinstanzen zuzugreifen, einschließlich der mit initializeTestEnvironment
konfigurierten.
// Assuming a Cloud Storage app and the Storage emulator for this example import { getStorage, ref, deleteObject } from "firebase/storage"; const alice = testEnv.unauthenticatedContext(); // Use the Cloud Storage instance associated with this context const desertRef = ref(alice.storage(), 'images/desert.jpg'); await assertSucceeds(deleteObject(desertRef));
RulesTestEnvironment.withSecurityRulesDisabled()
Führen Sie eine Testeinrichtungsfunktion mit einem Kontext aus, der sich so verhält, als seien die Sicherheitsregeln deaktiviert.
Diese Methode verwendet eine Callback-Funktion, die den Kontext verwendet, der Sicherheitsregeln umgeht, und die ein Promise zurückgibt. Der Kontext wird gelöscht, sobald das Promise aufgelöst oder abgelehnt wird.
RulesTestEnvironment.cleanup()
Diese Methode löscht alle RulesTestContexts
, die in der Testumgebung erstellt wurden, und bereinigt die zugrunde liegenden Ressourcen, was einen sauberen Beendigung ermöglicht.
Diese Methode ändert den Status der Emulatoren nicht. Verwenden Sie die Methode für spezifische Daten des Anwendungsemulators, um Daten zwischen Tests zurückzusetzen.
assertSucceeds(pr: Promise<any>)) => Promise<any>
Dies ist eine Dienstfunktion für Testläufe.
Die Funktion bestätigt, dass der bereitgestellte Promise, der einen Emulator-Vorgang verpackt, ohne Verstöße gegen Sicherheitsregeln aufgelöst wird.
await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });
assertFails(pr: Promise<any>)) => Promise<any>
Dies ist eine Dienstfunktion für Testläufe.
Die Funktion bestätigt, dass der bereitgestellte Promise, der einen Emulator-Vorgang verpackt, mit einem Verstoß gegen Sicherheitsregeln abgelehnt wird.
await assertFails(setDoc(alice.firestore(), '/users/bob'), { ... });
Emulator-spezifische Methoden
Weitere Informationen finden Sie auch unter Gängige Testmethoden und Dienstprogrammfunktionen 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 in der Realtime Database gelöscht, 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 (modular oder mit Namespace, Version 9 oder höher) verwendet werden. 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 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 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 erstellen Sie eine Anwendung, die als Administrator authentifiziert wird, um den Status für Tests festzulegen.
Gibt eine initialisierte Firebase-Admin-App zurück, die dem in den Optionen angegebenen Datenbanknamen entspricht. Diese Anwendung 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.
Regeln werden an eine lokal ausgeführte Datenbank gesendet. Es wird ein Optionsobjekt verwendet, in dem „databaseName“ und „rules“ als Strings angegeben sind.
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.
Damit können Sie bestätigen, dass ein Lese- oder Schreibvorgang für eine 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
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 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-Administratoranwendung zurück, die dem in den Optionen angegebenen Namen des Storage-Buckets 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());
RUT-Bibliothek API für JS SDK v8
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 erstellen Sie eine Anwendung, die als Administrator authentifiziert wird, um den Status für Tests festzulegen.
Gibt eine initialisierte Firebase-Admin-App zurück, die dem in den Optionen angegebenen Datenbanknamen entspricht. Diese Anwendung 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.
Regeln werden an eine lokal ausgeführte Datenbank gesendet. Es wird ein Optionsobjekt verwendet, in dem „databaseName“ und „rules“ als Strings angegeben sind.
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.
Damit können Sie bestätigen, dass ein Lese- oder Schreibvorgang für eine 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
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 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-Administratoranwendung zurück, die dem in den Optionen angegebenen Namen des Storage-Buckets 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());