Firebase Local Emulator Suite ułatwiają pełną weryfikację funkcji i zachowania aplikacji. Jest to też świetne narzędzie do sprawdzania konfiguracji usługi Firebase Security Rules. Używaj emulatorów Firebase do uruchamiania i automatyzacji testów jednostkowych 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 związanych z konkretnym emulatorem, takich jak czyszczenie wszystkich danych, które wymieniono 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 jawnie tworzyć instancji bazy danych. Emulator automatycznie utworzy każdą instancję bazy danych, do której uzyskujesz dostęp.
- Każda nowa baza danych jest inicjowana 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 został uwierzytelniony jako podany przez Ciebie podmiot. Jeśli podasz wartośćnull
, będzie ona zachowywać się jak użytkownik bez uwierzytelnienia (na przykład 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>
Lokalne testy jednostkowe z pakietem JavaScript SDK 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 bibliotekę testów v9, która jest bardziej ulepszoną wersją i wymaga mniejszej konfiguracji w celu połączenia z emulatorami, dzięki czemu można bezpiecznie uniknąć przypadkowego użycia zasobów produkcyjnych. Ze względu na zgodność wsteczną nadal udostępniamy bibliotekę testów w wersji 8.
- Najczęściej używane metody testów i funkcje pomocnicze 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 interakcje 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ć notacji async/await
. Prawie wszystkie zachowania, które chcesz 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 w wersji 9. 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 ich implementacja obejmuje:
- Tworzenie i konfigurowanie
RulesTestEnvironment
za pomocą funkcji wywołaniainitializeTestEnvironment
. - 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 obiekt RulesTestContext
, który zachowuje się 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 test context w testach, aby uzyskać dostęp do wszystkich 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 obiekt RulesTestContext
, który zachowuje się jak klient niezalogowany za pomocą Authentication. Żądania utworzone za pomocą zwróconego kontekstu nie będą zawierać tokenów Uwierzytelniania Firebase.
Używaj zwracanego obiektu test context w testach, aby uzyskać dostęp do wszystkich 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ł bezpieczeństwa 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 pomocnicza testowego przypadku użycia.
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 ramach tego testowanego kontekstu. 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ślony, zwraca instancję 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 pamięci należących do projectId
skonfigurowanego dla emulatora Cloud Storage.
RulesTestContext.storage(bucketUrl?: string) => Firebase Storage;
Ta metoda zwraca instancję Storage skonfigurowaną do połączenia z emulatorem.
Metoda przyjmuje adres URL gs://
do zasobnika Firebase Storage na potrzeby testowania. Jeśli jest podany, zwraca instancję Storage dla emulowanej wersji nazwy zasobnika.
Uruchom testy jednostkowe na komputerze za pomocą pakietu JavaScript SDK v8
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 tego, 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ę Firebase dla administratora. Podczas odczytu i zapisu ta aplikacja pomija reguły zabezpieczeń. 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żyj tego polecenia, aby sprawdzić, czy odczyt lub zapis bazy danych się nie powiodło.
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 konkretny użytkownik do testów.
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 tej opcji, aby utworzyć aplikację uwierzytelnioną jako administrator, aby skonfigurować stan 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 tego kodu, aby wyczyścić aplikacje między testami lub po ich zakończeniu (pamiętaj, że zainicjowane aplikacje z aktywnymi odbiorcami zapobiegają zamknięciu 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 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 tej opcji, aby utworzyć aplikację uwierzytelnioną jako konkretny użytkownik do testów.
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 tej opcji, 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 lokalnie zarządzanych zasobników na dane. 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 tego kodu, aby wyczyścić aplikacje między testami lub po ich zakończeniu (pamiętaj, że zainicjowane aplikacje z aktywnymi odbiorcami zapobiegają zamknięciu 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 używane przez pakiet SDK Test Firebase do interakcji 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 tego, 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ę Firebase dla administratora. Podczas odczytu i zapisu ta aplikacja pomija reguły zabezpieczeń. 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żyj tego polecenia, aby sprawdzić, czy odczyt lub zapis bazy danych się nie powiodło.
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 konkretny użytkownik do testów.
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 tej opcji, aby utworzyć aplikację uwierzytelnioną jako administrator, aby skonfigurować stan 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 tego kodu, aby wyczyścić aplikacje między testami lub po ich zakończeniu (pamiętaj, że zainicjowane aplikacje z aktywnymi odbiorcami zapobiegają zamknięciu 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 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 tej opcji, aby utworzyć aplikację uwierzytelnioną jako konkretny użytkownik do testów.
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 tej opcji, 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 lokalnie zarządzanych zasobników na dane. 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 tego kodu, aby wyczyścić aplikacje między testami lub po ich zakończeniu (pamiętaj, że zainicjowane aplikacje z aktywnymi odbiorcami zapobiegają zamknięciu 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());