Firebase Local Emulator Suite ułatwiają pełną weryfikację funkcji i działania aplikacji. Jest to też świetne narzędzie do sprawdzania konfiguracji usługi Firebase Security Rules. Emulatory Firebase pozwalają przeprowadzać i automatyzować testy jednostkowe w środowisku lokalnym. Metody opisane w tym dokumencie powinny ułatwić Ci tworzenie i automatyzowanie testów jednostkowych aplikacji, które weryfikują Rules.
Skonfiguruj emulatory Firebase, jeśli jeszcze tego nie zrobiono.
Przed uruchomieniem emulatora
Zanim zaczniesz korzystać z emulatora, pamiętaj o tych kwestiach:
- Na początku emulator wczyta reguły określone w pliku
firestore.rules
lub w polu „storage.rules” plikufirebase.json
. Jeśli plik nie istnieje i nie używasz metodyloadFirestoreRules
ani metody „loadStorageRules”, jak opisano poniżej, emulator traktuje wszystkie projekty jako mające otwarte reguły. - Chociaż większości pakietów SDK Firebase można używać bezpośrednio z emulatorami, tylko biblioteka
@firebase/rules-unit-testing
obsługuje symulowanieauth
w regułach zabezpieczeń, co znacznie ułatwia testy jednostkowe. Dodatkowo biblioteka obsługuje kilka funkcji specyficznych dla emulatorów, takich jak czyszczenie wszystkich danych wymienionych poniżej. - Emulatorów można też używać do testowania integracji i ręcznych testów, łącząc aplikację bezpośrednio z emulatorami. W tym celu emulatory będą akceptować tokeny uwierzytelniania Firebase w wersji produkcyjnej udostępniane za pomocą pakietów SDK klienta i odpowiednio oceniać reguły.
Różnice między emulatorem bazy danych a wersją produkcyjną
- Nie musisz bezpośrednio tworzyć instancji bazy danych. Emulator automatycznie utworzy każdą instancję bazy danych, do której uzyskujesz dostęp.
- Każda nowa baza danych jest uruchamiana z zamkniętymi regułami, więc użytkownicy bez uprawnień administratora nie będą mogli odczytywać ani zapisywać danych.
- Każda emulowana baza danych ma limity i kwoty abonamentu Spark (w szczególności każda instancja ma limit 100 jednoczesnych połączeń).
- Każda baza danych zaakceptuje ciąg znaków
"owner"
jako token uwierzytelniający administratora. - Emulatory nie współpracują obecnie z innymi usługami Firebase. W szczególności normalny proces uwierzytelniania Firebase nie działa.
Zamiast tego możesz użyć metody
initializeTestApp()
w bibliotecerules-unit-testing
, która przyjmuje poleauth
. Obiekt Firebase utworzony za pomocą tej metody zachowuje się tak, jakby uwierzytelnił się jako dowolny podany przez Ciebie obiekt. Jeśli podasz wartośćnull
, będzie ona zachowywać się jak niezalogowany użytkownik (np. regułyauth != null
nie będą działać).
Interakcja z emulatorem Realtime Database
Do instancji produkcyjnej Firebase Realtime Database można uzyskać dostęp na subdomenie firebaseio.com
. Do interfejsu REST API można uzyskać dostęp w ten sposób:
https://<database_name>.firebaseio.com/path/to/my/data.json
Emulator działa lokalnie i jest dostępny pod adresem localhost:9000
. Aby korzystać z konkretnego wystąpienia bazy danych, musisz użyć parametru zapytania ns
, aby określić nazwę bazy danych.
http://localhost:9000/path/to/my/data.json?ns=<database_name>
Przeprowadzanie lokalnych testów jednostkowych za pomocą pakietu SDK JavaScript w wersji 9
Firebase udostępnia bibliotekę do testowania jednostek reguł bezpieczeństwa zarówno z pakietem SDK JavaScript w wersji 9, jak i z pakietem SDK w wersji 8. Interfejsy API bibliotek są znacznie inne. Zalecamy korzystanie z biblioteki testowej v9, która jest bardziej usprawniona i wymaga mniej konfiguracji do łączenia się z emulatorami, dzięki czemu można bezpiecznie unikać przypadkowego użycia zasobów produkcyjnych. Ze względu na zgodność wsteczną nadal udostępniamy bibliotekę testów w wersji 8.
- Typowe metody testowania i funkcje narzędziowe w pakiecie SDK w wersji 9
- Metody testów w emulatorze w pakiecie SDK w wersji 9
Użyj modułu @firebase/rules-unit-testing
, aby wchodzić w interakcję z emulatorem działającym lokalnie. Jeśli wystąpią przekroczenia limitu czasu lub błędy ECONNREFUSED
, sprawdź, czy emulator rzeczywiście działa.
Zdecydowanie zalecamy korzystanie z najnowszej wersji Node.js, aby można było używać zapisu async/await
. Prawie wszystkie zachowania, które warto przetestować, obejmują funkcje asynchroniczne, a moduł testowania jest zaprojektowany do współpracy z kodem opartym na obietnicach.
Biblioteka testowania jednostkowego reguł w wersji 9 zawsze ma dostęp do emulatorów i nigdy nie dotyka Twoich zasobów produkcyjnych.
Bibliotekę importujesz za pomocą instrukcji importu modułowego v9. Przykład:
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.
Po zaimportowaniu testów jednostkowych należy:
- Tworzenie i konfigurowanie
RulesTestEnvironment
za pomocą wywołania funkcjiinitializeTestEnvironment
. - Konfigurowanie danych testowych bez wywoływania Rules za pomocą wygodnej metody, która pozwala na ich tymczasowe pominięcie.
RulesTestEnvironment.withSecurityRulesDisabled
- Konfigurowanie zbioru testów i funkcji przed testem lub po nim za pomocą wywołań służących do czyszczenia danych testowych i środowiska, np.
RulesTestEnvironment.cleanup()
lubRulesTestEnvironment.clearFirestore()
. - Wdrażanie przypadków testowych, które symulują stany uwierzytelniania za pomocą
RulesTestEnvironment.authenticatedContext
iRulesTestEnvironment.unauthenticatedContext
.
Typowe metody i funkcje użytkowe
Zobacz też metody testowania dotyczące konkretnego emulatora za pomocą interfejsu API modularnego.
initializeTestEnvironment() => RulesTestEnvironment
Ta funkcja inicjuje środowisko testowe do testowania reguł jednostkowych. Najpierw wywołaj tę funkcję, aby skonfigurować test. Aby uruchomić test, musisz uruchomić emulatory.
Funkcja akceptuje opcjonalny obiekt definiujący TestEnvironmentConfig
, który może zawierać identyfikator projektu i ustawienia konfiguracji emulatora.
let testEnv = await initializeTestEnvironment({ projectId: "demo-project-1234", firestore: { rules: fs.readFileSync("firestore.rules", "utf8"), }, });
RulesTestEnvironment.authenticatedContext({ user_id: string, tokenOptions?: TokenOptions }) => RulesTestContext
Ta metoda tworzy RulesTestContext
, który działa jak uwierzytelniony użytkownik Authentication. Żądania utworzone za pomocą zwróconego kontekstu będą zawierać dołączony tokenAuthentication. Opcjonalnie możesz przekazać obiekt definiujący oświadczenia niestandardowe lub zastąpienia dla Authentication tokenów.
Używaj zwracanego obiektu kontekstu testu w testach, aby uzyskać dostęp do skonfigurowanych instancji emulatora, w tym do tych skonfigurowanych za pomocą 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
Ta metoda tworzy RulesTestContext
, który działa jak klient, który nie jest zalogowany za pomocą Authentication. Do żądań utworzonych przy użyciu zwróconego kontekstu nie będą dołączone tokeny uwierzytelniania Firebase.
Używaj zwracanego obiektu kontekstu testu w testach, aby uzyskać dostęp do skonfigurowanych instancji emulatora, w tym do tych skonfigurowanych za pomocą 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()
Uruchom funkcję testowego ustawienia z kontekstem, który zachowuje się tak, jakby reguły zabezpieczeń były wyłączone.
Ta metoda przyjmuje funkcję wywołania zwrotnego, która przyjmuje kontekst pomijania reguł zabezpieczeń i zwraca obietnicę. Kontekst zostanie usunięty, gdy obietnica zostanie spełniona lub odrzucona.
RulesTestEnvironment.cleanup()
Ta metoda usuwa wszystkie RulesTestContexts
utworzone w środowisku testowym i oczyszcza zasoby, co umożliwia prawidłowe zakończenie.
Ta metoda nie zmienia w żaden sposób stanu emulatorów. Aby zresetować dane między testami, użyj metody czyszczenia danych odpowiedniej dla danego emulatora aplikacji.
assertSucceeds(pr: Promise<any>)) => Promise<any>
To jest funkcja pomocnicza testowego przypadku użycia.
Funkcja stwierdza, że dostarczona obietnica obejmująca operację emulatora zostanie rozwiązana bez naruszenia reguł zabezpieczeń.
await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });
assertFails(pr: Promise<any>)) => Promise<any>
To jest funkcja narzędziowa przypadku testowego.
Funkcja stwierdza, że dostarczona obietnica obejmująca działanie emulatora zostanie odrzucona z powodu naruszenia reguł bezpieczeństwa.
await assertFails(setDoc(alice.firestore(), '/users/bob'), { ... });
Metody dotyczące emulatora
Zapoznaj się też z popularnymi metodami testowania i funkcjami pomocniczymi korzystającymi z interfejsu API w wersji modułowej.
Cloud Firestore
Cloud Firestore
RulesTestEnvironment.clearFirestore() => Promise<void>
Ta metoda usuwa dane z bazy danych Firestore należącej do instancji projectId
skonfigurowanej dla emulatora Firestore.
RulesTestContext.firestore(settings?: Firestore.FirestoreSettings) => Firestore;
Ta metoda pobiera instancję Firestore dla tego testowanego kontekstu. Zwrócony obiekt pakietu SDK klienta Firebase JS można używać z interfejsami API pakietu SDK klienta (wersja 9 modularna lub kompatybilna z wersją 9).
Realtime Database
Realtime Database
RulesTestEnvironment.clearDatabase() => Promise<void>
Ta metoda usuwa dane w Realtime Database należące do projectId
skonfigurowanego dla emulatora Realtime Database.
RulesTestContext.database(databaseURL?: Firestore.FirestoreSettings) => Firestore;
Pobierz instancję Realtime Database w tym kontekście testowym. Zwrócony obiekt pakietu SDK klienta Firebase JS można używać z interfejsami API pakietu SDK klienta (modułowego lub z przestrzenią nazw, w wersji 9 lub nowszej). Metoda przyjmuje adres URL instancji bazy danych w czasie rzeczywistym. Jeśli jest określona, zwraca instancję dla emulowanej wersji przestrzeni nazw z parametrami wyodrębnionymi z adresu URL.
Cloud Storage
Cloud Storage
RulesTestEnvironment.clearStorage() => Promise<void>
Ta metoda usuwa obiekty i metadane w zasobnikach należących do projectId
skonfigurowanego dla emulatora Cloud Storage.
RulesTestContext.storage(bucketUrl?: string) => Firebase Storage;
Ta metoda zwraca instancję Storage skonfigurowaną pod kątem połączenia z emulatorem.
Metoda przyjmuje adres URL gs://
do zasobnika Firebase Storage na potrzeby testowania. Jeśli jest określona, zwraca instancję Storage dla emulowanej wersji nazwy zasobnika.
Przeprowadzaj lokalne testy jednostkowe za pomocą pakietu SDK JavaScript w wersji 8
Wybierz usługę, aby zobaczyć metody używane przez pakiet SDK Test Firebase do interakcji z emulatorem.
Cloud Firestore
initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp
Ta metoda zwraca zainicjowaną aplikację Firebase odpowiadającą identyfikatorowi projektu i zmiennej uwierzytelniania określonym w opcjach. Użyj tej opcji, aby utworzyć aplikację uwierzytelnioną jako konkretny użytkownik do testów.
firebase.initializeTestApp({ projectId: "my-test-project", auth: { uid: "alice", email: "alice@example.com" } });
initializeAdminApp({ projectId: string }) => FirebaseApp
Ta metoda zwraca zainicjowaną aplikację administracyjną Firebase. Ta aplikacja pomija reguły zabezpieczeń podczas wykonywania odczytów i zapisów. Użyj tego, aby utworzyć aplikację uwierzytelnioną jako administrator, aby ustawić stan testów.
firebase.initializeAdminApp({ projectId: "my-test-project" });
apps() => [FirebaseApp]
Ta metoda zwraca wszystkie obecnie zainicjowane aplikacje testowe i administracyjne.
Użyj tej opcji, aby usunąć aplikacje między testami lub po ich zakończeniu.
Promise.all(firebase.apps().map(app => app.delete()))
loadFirestoreRules({ projectId: string, rules: Object }) => Promise
Ta metoda wysyła reguły do lokalnej bazy danych. Funkcja ta przyjmuje obiekt, który określa reguły jako ciąg znaków. Użyj tej metody, aby ustawić reguły bazy danych.
firebase.loadFirestoreRules({ projectId: "my-test-project", rules: fs.readFileSync("/path/to/firestore.rules", "utf8") });
assertFails(pr: Promise) => Promise
Ta metoda zwraca obietnicę, która jest odrzucana, jeśli dane wejściowe są prawidłowe, lub zaakceptowana, jeśli dane wejściowe są odrzucone. Używaj go, aby sprawdzić, czy odczyt lub zapis bazy danych się nie udał.
firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
assertSucceeds(pr: Promise) => Promise
Ta metoda zwraca obietnicę, która jest spełniona, jeśli dane wejściowe są prawidłowe, i odrzucona, jeśli są odrzucone. Używaj go, aby sprawdzić, czy odczyt lub zapis bazy danych zakończył się powodzeniem.
firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
clearFirestoreData({ projectId: string }) => Promise
Ta metoda usuwa wszystkie dane powiązane z danym projektem w przypadku lokalnie uruchomionej instancji Firestore. Użyj tej metody do wyczyszczenia po testach.
firebase.clearFirestoreData({ projectId: "my-test-project" });
Realtime Database
Realtime Database
initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp
Użyj tej opcji, aby utworzyć aplikację uwierzytelnioną jako określony użytkownik, która będzie używana w testach.
Zwraca zainicjowaną aplikację Firebase odpowiadającą nazwie bazy danych i zastąpieniu zmiennej uwierzytelniania określonemu w opcjach.
firebase.initializeTestApp({
databaseName: "my-database",
auth: { uid: "alice" }
});
initializeAdminApp({ databaseName: string }) => FirebaseApp
Użyj go, aby utworzyć aplikację uwierzytelnioną jako administrator w celu skonfigurowania stanu na potrzeby testów.
Zwraca zainicjowaną aplikację Firebase administratora odpowiadającą nazwie bazy danych określonej w opcjach. Ta aplikacja omija reguły zabezpieczeń podczas odczytu i zapisu do bazy danych.
firebase.initializeAdminApp({ databaseName: "my-database" });
loadDatabaseRules({ databaseName: string, rules: Object }) => Promise
Użyj tego, aby ustawić reguły bazy danych.
Przesyła reguły do lokalnej bazy danych. Przyjmuje obiekt opcji, który określa ciągi znaków „databaseName” i „rules”.
firebase
.loadDatabaseRules({
databaseName: "my-database",
rules: "{'rules': {'.read': false, '.write': false}}"
});
apps() => [FirebaseApp]
Zwraca wszystkie obecnie zainicjowane aplikacje testowe i administracyjne.
Użyj tej opcji, aby wyczyścić aplikacje między testami lub po nich (pamiętaj, że zainicjowane aplikacje z aktywnymi detektorami uniemożliwiają zamykanie kodu JavaScript):
Promise.all(firebase.apps().map(app => app.delete()))
assertFails(pr: Promise) => Promise
Zwraca obietnicę, która jest odrzucona, jeśli dane wejściowe są spełnione, i kończy się powodzeniem, jeśli dane wejściowe zostaną odrzucone.
Użyj tego polecenia, aby stwierdzić, że odczyt lub zapis bazy danych się nie udaje:
firebase.assertFails(app.database().ref("secret").once("value"));
assertSucceeds(pr: Promise) => Promise
Zwraca obietnicę, która jest spełniona, jeśli dane wejściowe są prawidłowe, i odrzucona, jeśli są odrzucone.
Użyj tego polecenia, aby potwierdzić, że odczyt lub zapis bazy danych się powiodło:
firebase.assertSucceeds(app.database().ref("public").once("value"));
Cloud Storage
Cloud Storage
initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp
Użyj tego pola, aby utworzyć aplikację uwierzytelnioną jako określony użytkownik do wykorzystania w testach.
Zwraca zainicjowaną aplikację Firebase odpowiadającą nazwie zasobnika pamięci masowej i zastąpieniu zmiennej uwierzytelniania określonego w opcjach.
firebase.initializeTestApp({
storageBucket: "my-bucket",
auth: { uid: "alice" }
});
initializeAdminApp({ storageBucket: string }) => FirebaseApp
Użyj tego, aby utworzyć aplikację uwierzytelnioną jako administrator, aby skonfigurować stan na potrzeby testów.
Zwraca zainicjowaną przez administratora aplikację Firebase odpowiadającą nazwie zasobnika pamięci podręcznej podanej w opcjach. Aplikacja ta omija reguły zabezpieczeń podczas odczytu i zapisu do zasobnika.
firebase.initializeAdminApp({ storageBucket: "my-bucket" });
loadStorageRules({ storageBucket: string, rules: Object }) => Promise
Użyj go do skonfigurowania reguł zasobnika pamięci.
Wysyła reguły do zasobników na dane zarządzanego lokalnie. Przyjmuje obiekt opcji, który określa „storageBucket” i „rules” jako ciągi znaków.
firebase
.loadStorageRules({
storageBucket: "my-bucket",
rules: fs.readFileSync("/path/to/storage.rules", "utf8")
});
apps() => [FirebaseApp]
Zwraca wszystkie obecnie zainicjowane aplikacje testowe i administracyjne.
Użyj tej opcji, aby wyczyścić aplikacje między testami lub po nich (pamiętaj, że zainicjowane aplikacje z aktywnymi detektorami uniemożliwiają zamykanie kodu JavaScript):
Promise.all(firebase.apps().map(app => app.delete()))
assertFails(pr: Promise) => Promise
Zwraca obietnicę, która jest odrzucana, jeśli dane wejściowe są prawidłowe, i zwracana, jeśli dane wejściowe są odrzucane.
Użyj tego polecenia, aby sprawdzić, czy odczyt lub zapis zasobnika magazynu nie zakończył się niepowodzeniem:
firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());
assertSucceeds(pr: Promise) => Promise
Zwraca obietnicę, która jest spełniona, jeśli dane wejściowe są prawidłowe, i odrzucana, jeśli są odrzucone.
Użyj tego polecenia, aby potwierdzić, że odczyt lub zapis zasobnika magazynu zakończył się powodzeniem:
firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());
Interfejs API biblioteki RUT w JS SDK w wersji 8
Wybierz usługę, aby zobaczyć metody, których używa pakiet SDK Firebase Test do łączenia się z emulatorem.
Cloud Firestore
Cloud Firestore
initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp
Ta metoda zwraca zainicjowaną aplikację Firebase odpowiadającą identyfikatorowi projektu i zmiennej uwierzytelniania określonym w opcjach. Użyj tej opcji, aby utworzyć aplikację uwierzytelnioną jako konkretny użytkownik do testów.
firebase.initializeTestApp({ projectId: "my-test-project", auth: { uid: "alice", email: "alice@example.com" } });
initializeAdminApp({ projectId: string }) => FirebaseApp
Ta metoda zwraca zainicjowaną aplikację administracyjną Firebase. Ta aplikacja pomija reguły zabezpieczeń podczas wykonywania odczytów i zapisów. Użyj tego, aby utworzyć aplikację uwierzytelnioną jako administrator, aby ustawić stan testów.
firebase.initializeAdminApp({ projectId: "my-test-project" });
apps() => [FirebaseApp]
Ta metoda zwraca wszystkie obecnie zainicjowane aplikacje testowe i administracyjne.
Użyj tej opcji, aby usunąć aplikacje między testami lub po ich zakończeniu.
Promise.all(firebase.apps().map(app => app.delete()))
loadFirestoreRules({ projectId: string, rules: Object }) => Promise
Ta metoda wysyła reguły do lokalnej bazy danych. Funkcja ta przyjmuje obiekt, który określa reguły jako ciąg znaków. Użyj tej metody, aby ustawić reguły bazy danych.
firebase.loadFirestoreRules({ projectId: "my-test-project", rules: fs.readFileSync("/path/to/firestore.rules", "utf8") });
assertFails(pr: Promise) => Promise
Ta metoda zwraca obietnicę, która jest odrzucana, jeśli dane wejściowe są prawidłowe, lub zaakceptowana, jeśli dane wejściowe są odrzucone. Używaj go, aby sprawdzić, czy odczyt lub zapis bazy danych się nie udał.
firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
assertSucceeds(pr: Promise) => Promise
Ta metoda zwraca obietnicę, która jest spełniona, jeśli dane wejściowe są prawidłowe, i odrzucona, jeśli są odrzucone. Używaj go, aby sprawdzić, czy odczyt lub zapis bazy danych zakończył się powodzeniem.
firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
clearFirestoreData({ projectId: string }) => Promise
Ta metoda usuwa wszystkie dane powiązane z danym projektem w przypadku lokalnie uruchomionej instancji Firestore. Użyj tej metody do wyczyszczenia po testach.
firebase.clearFirestoreData({ projectId: "my-test-project" });
Realtime Database
Realtime Database
initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp
Użyj tej opcji, aby utworzyć aplikację uwierzytelnioną jako określony użytkownik, która będzie używana w testach.
Zwraca zainicjowaną aplikację Firebase odpowiadającą nazwie bazy danych i zastąpieniu zmiennej uwierzytelniania określonemu w opcjach.
firebase.initializeTestApp({
databaseName: "my-database",
auth: { uid: "alice" }
});
initializeAdminApp({ databaseName: string }) => FirebaseApp
Użyj go, aby utworzyć aplikację uwierzytelnioną jako administrator w celu skonfigurowania stanu na potrzeby testów.
Zwraca zainicjowaną aplikację Firebase administratora odpowiadającą nazwie bazy danych określonej w opcjach. Ta aplikacja omija reguły zabezpieczeń podczas odczytu i zapisu do bazy danych.
firebase.initializeAdminApp({ databaseName: "my-database" });
loadDatabaseRules({ databaseName: string, rules: Object }) => Promise
Użyj tego, aby ustawić reguły bazy danych.
Przesyła reguły do lokalnej bazy danych. Przyjmuje obiekt opcji, który określa ciągi znaków „databaseName” i „rules”.
firebase
.loadDatabaseRules({
databaseName: "my-database",
rules: "{'rules': {'.read': false, '.write': false}}"
});
apps() => [FirebaseApp]
Zwraca wszystkie obecnie zainicjowane aplikacje testowe i administracyjne.
Użyj tej opcji, aby wyczyścić aplikacje między testami lub po nich (pamiętaj, że zainicjowane aplikacje z aktywnymi detektorami uniemożliwiają zamykanie kodu JavaScript):
Promise.all(firebase.apps().map(app => app.delete()))
assertFails(pr: Promise) => Promise
Zwraca obietnicę, która jest odrzucona, jeśli dane wejściowe są spełnione, i kończy się powodzeniem, jeśli dane wejściowe zostaną odrzucone.
Użyj tego polecenia, aby stwierdzić, że odczyt lub zapis bazy danych się nie udaje:
firebase.assertFails(app.database().ref("secret").once("value"));
assertSucceeds(pr: Promise) => Promise
Zwraca obietnicę, która jest spełniona, jeśli dane wejściowe są prawidłowe, i odrzucona, jeśli są odrzucone.
Użyj tego polecenia, aby potwierdzić, że odczyt lub zapis bazy danych się powiodło:
firebase.assertSucceeds(app.database().ref("public").once("value"));
Cloud Storage
Cloud Storage
initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp
Użyj tego pola, aby utworzyć aplikację uwierzytelnioną jako określony użytkownik do wykorzystania w testach.
Zwraca zainicjowaną aplikację Firebase odpowiadającą nazwie zasobnika pamięci masowej i zastąpieniu zmiennej uwierzytelniania określonego w opcjach.
firebase.initializeTestApp({
storageBucket: "my-bucket",
auth: { uid: "alice" }
});
initializeAdminApp({ storageBucket: string }) => FirebaseApp
Użyj tego, aby utworzyć aplikację uwierzytelnioną jako administrator, aby skonfigurować stan na potrzeby testów.
Zwraca zainicjowaną przez administratora aplikację Firebase odpowiadającą nazwie zasobnika pamięci podręcznej podanej w opcjach. Aplikacja ta omija reguły zabezpieczeń podczas odczytu i zapisu do zasobnika.
firebase.initializeAdminApp({ storageBucket: "my-bucket" });
loadStorageRules({ storageBucket: string, rules: Object }) => Promise
Użyj go do skonfigurowania reguł zasobnika pamięci.
Wysyła reguły do zasobników na dane zarządzanego lokalnie. Przyjmuje obiekt opcji, który określa „storageBucket” i „rules” jako ciągi znaków.
firebase
.loadStorageRules({
storageBucket: "my-bucket",
rules: fs.readFileSync("/path/to/storage.rules", "utf8")
});
apps() => [FirebaseApp]
Zwraca wszystkie obecnie zainicjowane aplikacje testowe i administracyjne.
Użyj tej opcji, aby wyczyścić aplikacje między testami lub po nich (pamiętaj, że zainicjowane aplikacje z aktywnymi detektorami uniemożliwiają zamykanie kodu JavaScript):
Promise.all(firebase.apps().map(app => app.delete()))
assertFails(pr: Promise) => Promise
Zwraca obietnicę, która jest odrzucana, jeśli dane wejściowe są prawidłowe, i zwracana, jeśli dane wejściowe są odrzucane.
Użyj tego polecenia, aby sprawdzić, czy odczyt lub zapis zasobnika magazynu nie zakończył się niepowodzeniem:
firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());
assertSucceeds(pr: Promise) => Promise
Zwraca obietnicę, która jest spełniona, jeśli dane wejściowe są prawidłowe, i odrzucana, jeśli są odrzucone.
Użyj tego polecenia, aby potwierdzić, że odczyt lub zapis zasobnika magazynu zakończył się powodzeniem:
firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());