Zbuduj testy jednostkowe

Pakiet Firebase Local Emulator Suite ułatwia pełną weryfikację funkcji i zachowania aplikacji . To także świetne narzędzie do weryfikowania konfiguracji Reguł bezpieczeństwa Firebase. Użyj emulatorów Firebase do uruchamiania i automatyzacji testów jednostkowych w środowisku lokalnym. Metody opisane w tym dokumencie powinny pomóc w tworzeniu i automatyzacji testów jednostkowych dla aplikacji, które sprawdzają poprawność reguł.

Jeśli jeszcze tego nie zrobiłeś, skonfiguruj emulatory Firebase .

Przed uruchomieniem emulatora

Zanim zaczniesz korzystać z emulatora, pamiętaj o następujących kwestiach:

  • Emulator początkowo załaduje reguły określone w polu firestore.rules lub „storage.rules” pliku firebase.json . Jeśli plik nie istnieje i nie używasz metody loadFirestoreRules lub „loadStorageRules”, jak opisano poniżej, emulator traktuje wszystkie projekty jako mające otwarte reguły.
  • Podczas gdy większość zestawów SDK Firebase współpracuje bezpośrednio z emulatorami, tylko biblioteka @firebase/rules-unit-testing obsługuje fałszywe auth w regułach bezpieczeństwa, co znacznie ułatwia testy jednostkowe. Ponadto biblioteka obsługuje kilka funkcji specyficznych dla emulatora, takich jak czyszczenie wszystkich danych, jak wymieniono poniżej.
  • Emulatory akceptują również produkcyjne tokeny Firebase Auth dostarczane za pośrednictwem SDK klienta i odpowiednio oceniają reguły, co umożliwia bezpośrednie połączenie aplikacji z emulatorami w testach integracyjnych i ręcznych.

Różnice między emulatorami bazy danych a produkcją

  • Nie musisz jawnie tworzyć instancji bazy danych. Emulator automatycznie utworzy każdą dostępną instancję bazy danych.
  • Każda nowa baza danych jest uruchamiana z zamkniętymi regułami, więc użytkownicy niebędący administratorami nie będą mogli czytać ani pisać.
  • Każda emulowana baza danych stosuje limity i przydziały planu Spark (przede wszystkim ogranicza to każde wystąpienie do 100 jednoczesnych połączeń).
  • Każda baza danych zaakceptuje ciąg "owner" jako token autoryzacji administratora.
  • Emulatory obecnie nie współpracują z innymi produktami Firebase. Warto zauważyć, że normalny przepływ uwierzytelniania Firebase nie działa. Zamiast tego możesz użyć metody initializeTestApp() w bibliotece rules-unit-testing , która przyjmuje pole auth . Obiekt Firebase utworzony przy użyciu tej metody zachowuje się tak, jakby został pomyślnie uwierzytelniony jako dowolna podana jednostka. Jeśli przekażesz null , będzie się zachowywał jak nieuwierzytelniony użytkownik (na przykład reguły auth != null zawiodą).

Interakcja z emulatorem bazy danych czasu rzeczywistego

Produkcyjna instancja bazy danych czasu rzeczywistego Firebase jest dostępna w subdomenie firebaseio.com i możesz uzyskać dostęp do interfejsu API REST w następujący sposób:

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

Emulator działa lokalnie i jest dostępny pod localhost:9000 . Aby wejść w interakcję z konkretną instancją bazy danych, będziesz musiał użyć parametru zapytania ns , aby określić nazwę bazy danych.

http://localhost:9000/path/to/my/data.json?ns=<database_name>

Przeprowadzaj lokalne testy jednostkowe za pomocą zestawu SDK języka JavaScript w wersji 9

Firebase dystrybuuje bibliotekę testów jednostkowych reguł bezpieczeństwa wraz z pakietem SDK JavaScript w wersji 9 i pakietem SDK w wersji 8. Interfejsy API bibliotek znacznie się różnią. Zalecamy bibliotekę testową v9, która jest bardziej usprawniona i wymaga mniej konfiguracji w celu połączenia z emulatorami, a tym samym bezpiecznie unika przypadkowego użycia zasobów produkcyjnych. Aby zapewnić kompatybilność wsteczną, nadal udostępniamy bibliotekę testową w wersji 8 .

Użyj modułu @firebase/rules-unit-testing do interakcji z emulatorem działającym lokalnie. Jeśli wystąpią przekroczenia limitu czasu lub błędy ECONNREFUSED , dokładnie sprawdź, czy emulator faktycznie działa.

Zdecydowanie zalecamy korzystanie z najnowszej wersji Node.js, aby można było używać notacji async/await . Niemal wszystkie zachowania, które możesz chcieć przetestować, obejmują funkcje asynchroniczne, a moduł testowania został zaprojektowany do pracy z kodem opartym na obietnicy.

Biblioteka v9 Rules Unit Testing jest zawsze świadoma istnienia emulatorów i nigdy nie dotyka Twoich zasobów produkcyjnych.

Importujesz bibliotekę za pomocą modułowych instrukcji importu v9. Na przykład:

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.

Po zaimportowaniu wdrożenie testów jednostkowych obejmuje:

  • Tworzenie i konfigurowanie RulesTestEnvironment z wywołaniem metody initializeTestEnvironment .
  • Konfigurowanie danych testowych bez wyzwalania reguł przy użyciu wygodnej metody umożliwiającej tymczasowe ich pominięcie — RulesTestEnvironment.withSecurityRulesDisabled .
  • Konfigurowanie zestawu testów i poszczególnych testów przed/po wiąże się z wywołaniami do czyszczenia danych testowych i środowiska, takimi jak RulesTestEnvironment.cleanup() lub RulesTestEnvironment.clearFirestore() .
  • Implementacja przypadków testowych, które naśladują stany uwierzytelniania przy użyciu RulesTestEnvironment.authenticatedContext i RulesTestEnvironment.unauthenticatedContext .

Typowe metody i funkcje użytkowe

Zobacz także metody testowania specyficzne dla emulatora przy użyciu modułowego interfejsu API .

initializeTestEnvironment() => RulesTestEnvironment

Ta funkcja inicjuje środowisko testowe dla testów jednostkowych reguł. Wywołaj tę funkcję najpierw w celu konfiguracji testu. Pomyślne wykonanie wymaga uruchomienia emulatorów.

Funkcja akceptuje opcjonalny obiekt definiujący TestEnvironmentConfig , który może składać się z identyfikatora projektu i ustawień konfiguracyjnych 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óra zachowuje się jak uwierzytelniony użytkownik uwierzytelniania. Żądania utworzone za pośrednictwem zwróconego kontekstu będą miały dołączony fałszywy token uwierzytelniania. Opcjonalnie Przekaż obiekt definiujący niestandardowe oświadczenia lub przesłonięcia dla ładunków tokenu uwierzytelniania.

Użyj zwróconego obiektu kontekstu testowego w swoich testach, aby uzyskać dostęp do wszystkich skonfigurowanych wystąpień emulatora, w tym 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 zachowuje się jak klient, który nie jest zalogowany za pośrednictwem uwierzytelniania. Żądania utworzone za pośrednictwem zwróconego kontekstu nie będą miały dołączonych tokenów Firebase Auth.

Użyj zwróconego obiektu kontekstu testowego w swoich testach, aby uzyskać dostęp do wszystkich skonfigurowanych wystąpień emulatora, w tym 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ę konfiguracji testu z kontekstem, który zachowuje się tak, jakby reguły bezpieczeństwa były wyłączone.

Ta metoda przyjmuje funkcję wywołania zwrotnego, która przyjmuje kontekst omijania zasad zabezpieczeń i zwraca obietnicę. Kontekst zostanie zniszczony, gdy obietnica zostanie rozwiązana / odrzucona.

RulesTestEnvironment.cleanup()

Ta metoda niszczy wszystkie RulesTestContexts utworzone w środowisku testowym i czyści podstawowe zasoby, umożliwiając czyste wyjście.

Ta metoda w żaden sposób nie zmienia stanu emulatorów. Aby zresetować dane między testami, użyj metody czyszczenia danych specyficznej dla emulatora aplikacji.

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

Jest to funkcja użyteczności przypadków testowych.

Funkcja zapewnia, że ​​dostarczona obietnica zawijająca operację emulatora zostanie rozwiązana bez naruszenia zasad bezpieczeństwa.

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

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

Jest to funkcja użyteczności przypadków testowych.

Funkcja zapewnia, że ​​dostarczona obietnica zawijająca operację emulatora zostanie odrzucona z naruszeniem zasad bezpieczeństwa.

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

Metody specyficzne dla emulatora

Zapoznaj się również z popularnymi metodami testowania i funkcjami narzędziowymi wykorzystującymi modułowy interfejs API .

Cloud Firestore

Cloud Firestore

RulesTestEnvironment.clearFirestore() => Promise<void>

Ta metoda czyści dane w bazie danych Firestore, które należą do projectId skonfigurowanego dla emulatora Firestore.

RulesTestContext.firestore(settings?: Firestore.FirestoreSettings) => Firestore;

Ta metoda pobiera instancję Firestore dla tego kontekstu testowego. Zwrócona instancja Firebase JS Client SDK może być używana z interfejsami API klienta SDK (v9 modular lub v9 Compat).

Baza danych czasu rzeczywistego

Baza danych czasu rzeczywistego

RulesTestEnvironment.clearDatabase() => Promise<void>

Ta metoda czyści dane w bazie danych czasu rzeczywistego, które należą do projectId skonfigurowanego dla emulatora bazy danych czasu rzeczywistego.

RulesTestContext.database(databaseURL?: Firestore.FirestoreSettings) => Firestore;

Uzyskaj instancję bazy danych czasu rzeczywistego dla tego kontekstu testowego. Zwróconej instancji Firebase JS Client SDK można używać z interfejsami API SDK klienta (modułowymi lub przestrzeniami nazw, w wersji 9 lub nowszej). Metoda akceptuje adres URL instancji bazy danych czasu rzeczywistego. Jeśli określono, zwraca instancję dla emulowanej wersji przestrzeni nazw z parametrami wyodrębnionymi z adresu URL.

Magazyn w chmurze

Magazyn w chmurze

RulesTestEnvironment.clearStorage() => Promise<void>

Ta metoda czyści 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 wystąpienie Storage skonfigurowane do łączenia się z emulatorem. Metoda akceptuje adres URL gs:// do zasobnika Firebase do testowania. Jeśli określono, zwraca wystąpienie magazynu dla emulowanej wersji nazwy zasobnika.

Przeprowadzaj lokalne testy jednostkowe za pomocą zestawu SDK języka JavaScript w wersji 8

Wybierz produkt, aby zobaczyć metody używane przez pakiet Firebase Test SDK do łączenia się z emulatorem.

Cloud Firestore

initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp

Ta metoda zwraca zainicjowaną aplikację Firebase odpowiadającą identyfikatorowi projektu i zmiennej autoryzacji określonej w opcjach. Użyj tego, aby utworzyć aplikację uwierzytelnioną jako określony użytkownik do użycia w testach.

firebase.initializeTestApp({
  projectId: "my-test-project",
  auth: { uid: "alice", email: "alice@example.com" }
});

initializeAdminApp({ projectId: string }) => FirebaseApp

Ta metoda zwraca zainicjowaną aplikację Firebase administratora. Ta aplikacja omija zasady bezpieczeństwa podczas wykonywania operacji odczytu i zapisu. Użyj tego, aby utworzyć aplikację uwierzytelnioną jako administrator, aby ustawić stan na potrzeby testów.

firebase.initializeAdminApp({ projectId: "my-test-project" });
    

apps() => [FirebaseApp] Ta metoda zwraca wszystkie aktualnie zainicjowane aplikacje testowe i administracyjne. Użyj tego, aby wyczyścić aplikacje między testami lub po nich.

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

loadFirestoreRules({ projectId: string, rules: Object }) => Promise

Ta metoda wysyła reguły do ​​działającej lokalnie bazy danych. Pobiera 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 powiedzą się lub która powiedzie się, jeśli dane wejściowe zostaną odrzucone. Użyj tego, aby stwierdzić, czy odczyt lub zapis bazy danych nie powiedzie się.

firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
    

assertSucceeds(pr: Promise) => Promise

Ta metoda zwraca obietnicę, która powiedzie się, jeśli dane wejściowe powiedzą się i zostanie odrzucona, jeśli dane wejściowe zostaną odrzucone. Użyj tego, aby stwierdzić, czy odczyt lub zapis bazy danych się powiedzie.

firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
    

clearFirestoreData({ projectId: string }) => Promise

Ta metoda czyści wszystkie dane powiązane z konkretnym projektem w działającej lokalnie instancji Firestore. Użyj tej metody do sprzątania po testach.

firebase.clearFirestoreData({
  projectId: "my-test-project"
});
   

Baza danych czasu rzeczywistego

Baza danych czasu rzeczywistego

initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp

Użyj tego, aby utworzyć aplikację uwierzytelnioną jako określony użytkownik do użycia w testach.

Zwraca zainicjowaną aplikację Firebase odpowiadającą nazwie bazy danych i nadpisaniu zmiennej auth określonej w opcjach.

firebase.initializeTestApp({
  databaseName: "my-database",
  auth: { uid: "alice" }
});

initializeAdminApp({ databaseName: string }) => FirebaseApp

Użyj tego, aby utworzyć aplikację uwierzytelnioną jako administrator, aby skonfigurować stan do testów.

Zwraca zainicjowaną aplikację Firebase administratora odpowiadającą nazwie bazy danych określonej w opcjach. Ta aplikacja omija reguły bezpieczeństwa podczas odczytu i zapisu w bazie danych.

firebase.initializeAdminApp({ databaseName: "my-database" });

loadDatabaseRules({ databaseName: string, rules: Object }) => Promise

Użyj tego, aby ustawić reguły swojej bazy danych.

Wysyła reguły do ​​działającej lokalnie bazy danych. Pobiera obiekt opcji, który określa „nazwę bazy danych” i „reguły” jako ciągi znaków.

firebase
      .loadDatabaseRules({
        databaseName: "my-database",
        rules: "{'rules': {'.read': false, '.write': false}}"
      });

apps() => [FirebaseApp]

Zwraca wszystkie aktualnie zainicjowane aplikacje testowe i administracyjne.

Użyj tego, aby wyczyścić aplikacje między testami lub po nich (zwróć uwagę, że zainicjowane aplikacje z aktywnymi odbiornikami uniemożliwiają zamknięcie JavaScript):

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

assertFails(pr: Promise) => Promise

Zwraca obietnicę, która jest odrzucana, jeśli dane wejściowe powiedzą się i powiedzie się, jeśli dane wejściowe zostaną odrzucone.

Użyj tego, aby stwierdzić, że odczyt lub zapis bazy danych nie powiódł się:

firebase.assertFails(app.database().ref("secret").once("value"));

assertSucceeds(pr: Promise) => Promise

Zwraca obietnicę, która powiedzie się, jeśli dane wejściowe powiedzą się i zostanie odrzucona, jeśli dane wejściowe zostaną odrzucone.

Użyj tego, aby stwierdzić, że odczyt lub zapis bazy danych powiódł się:

firebase.assertSucceeds(app.database().ref("public").once("value"));

Magazyn w chmurze

Magazyn w chmurze

initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp

Użyj tego, aby utworzyć aplikację uwierzytelnioną jako określony użytkownik do użycia w testach.

Zwraca zainicjowaną aplikację Firebase odpowiadającą nazwie zasobnika pamięci i zastąpieniu zmiennej autoryzacji określonej 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 do testów.

Zwraca zainicjowaną aplikację Firebase administratora odpowiadającą nazwie zasobnika pamięci określonej w opcjach. Ta aplikacja omija reguły bezpieczeństwa podczas odczytu i zapisu w zasobniku.

firebase.initializeAdminApp({ storageBucket: "my-bucket" });

loadStorageRules({ storageBucket: string, rules: Object }) => Promise

Użyj tego, aby ustawić reguły swojego zasobnika na dane.

Wysyła reguły do ​​lokalnie zarządzanych zasobników pamięci masowej. Pobiera obiekt opcji, który określa „storageBucket” i „reguły” jako ciągi znaków.

firebase
      .loadStorageRules({
        storageBucket: "my-bucket",
        rules: fs.readFileSync("/path/to/storage.rules", "utf8")
      });

apps() => [FirebaseApp]

Zwraca wszystkie aktualnie zainicjowane aplikacje testowe i administracyjne.

Użyj tego, aby wyczyścić aplikacje między testami lub po nich (zwróć uwagę, że zainicjowane aplikacje z aktywnymi odbiornikami uniemożliwiają zamknięcie JavaScript):

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

assertFails(pr: Promise) => Promise

Zwraca obietnicę, która jest odrzucana, jeśli dane wejściowe powiedzą się i powiedzie się, jeśli dane wejściowe zostaną odrzucone.

Użyj tego, aby stwierdzić, że odczyt lub zapis zasobnika pamięci nie powiódł się:

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

assertSucceeds(pr: Promise) => Promise

Zwraca obietnicę, która powiedzie się, jeśli dane wejściowe powiedzą się i zostanie odrzucona, jeśli dane wejściowe zostaną odrzucone.

Użyj tego, aby upewnić się, że odczyt lub zapis zasobnika pamięci powiódł się:

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

API biblioteki RUT dla JS SDK v8

Wybierz produkt, aby zobaczyć metody używane przez pakiet Firebase Test SDK 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 autoryzacji określonej w opcjach. Użyj tego, aby utworzyć aplikację uwierzytelnioną jako określony użytkownik do użycia w testach.

firebase.initializeTestApp({
  projectId: "my-test-project",
  auth: { uid: "alice", email: "alice@example.com" }
});

initializeAdminApp({ projectId: string }) => FirebaseApp

Ta metoda zwraca zainicjowaną aplikację Firebase administratora. Ta aplikacja omija zasady bezpieczeństwa podczas wykonywania operacji odczytu i zapisu. Użyj tego, aby utworzyć aplikację uwierzytelnioną jako administrator, aby ustawić stan na potrzeby testów.

firebase.initializeAdminApp({ projectId: "my-test-project" });
    

apps() => [FirebaseApp] Ta metoda zwraca wszystkie aktualnie zainicjowane aplikacje testowe i administracyjne. Użyj tego, aby wyczyścić aplikacje między testami lub po nich.

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

loadFirestoreRules({ projectId: string, rules: Object }) => Promise

Ta metoda wysyła reguły do ​​działającej lokalnie bazy danych. Pobiera 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 powiedzą się lub która powiedzie się, jeśli dane wejściowe zostaną odrzucone. Użyj tego, aby stwierdzić, czy odczyt lub zapis bazy danych nie powiedzie się.

firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
    

assertSucceeds(pr: Promise) => Promise

Ta metoda zwraca obietnicę, która powiedzie się, jeśli dane wejściowe powiedzą się i zostanie odrzucona, jeśli dane wejściowe zostaną odrzucone. Użyj tego, aby stwierdzić, czy odczyt lub zapis bazy danych się powiedzie.

firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
    

clearFirestoreData({ projectId: string }) => Promise

Ta metoda czyści wszystkie dane powiązane z konkretnym projektem w działającej lokalnie instancji Firestore. Użyj tej metody do sprzątania po testach.

firebase.clearFirestoreData({
  projectId: "my-test-project"
});
   

Baza danych czasu rzeczywistego

Baza danych czasu rzeczywistego

initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp

Użyj tego, aby utworzyć aplikację uwierzytelnioną jako określony użytkownik do użycia w testach.

Zwraca zainicjowaną aplikację Firebase odpowiadającą nazwie bazy danych i nadpisaniu zmiennej auth określonej w opcjach.

firebase.initializeTestApp({
  databaseName: "my-database",
  auth: { uid: "alice" }
});

initializeAdminApp({ databaseName: string }) => FirebaseApp

Użyj tego, aby utworzyć aplikację uwierzytelnioną jako administrator, aby skonfigurować stan do testów.

Zwraca zainicjowaną aplikację Firebase administratora odpowiadającą nazwie bazy danych określonej w opcjach. Ta aplikacja omija reguły bezpieczeństwa podczas odczytu i zapisu w bazie danych.

firebase.initializeAdminApp({ databaseName: "my-database" });

loadDatabaseRules({ databaseName: string, rules: Object }) => Promise

Użyj tego, aby ustawić reguły swojej bazy danych.

Wysyła reguły do ​​działającej lokalnie bazy danych. Pobiera obiekt opcji, który określa „nazwę bazy danych” i „reguły” jako ciągi znaków.

firebase
      .loadDatabaseRules({
        databaseName: "my-database",
        rules: "{'rules': {'.read': false, '.write': false}}"
      });

apps() => [FirebaseApp]

Zwraca wszystkie aktualnie zainicjowane aplikacje testowe i administracyjne.

Użyj tego, aby wyczyścić aplikacje między testami lub po nich (zwróć uwagę, że zainicjowane aplikacje z aktywnymi odbiornikami uniemożliwiają zamknięcie JavaScript):

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

assertFails(pr: Promise) => Promise

Zwraca obietnicę, która jest odrzucana, jeśli dane wejściowe powiedzą się i powiedzie się, jeśli dane wejściowe zostaną odrzucone.

Użyj tego, aby stwierdzić, że odczyt lub zapis bazy danych nie powiódł się:

firebase.assertFails(app.database().ref("secret").once("value"));

assertSucceeds(pr: Promise) => Promise

Zwraca obietnicę, która powiedzie się, jeśli dane wejściowe powiedzą się i zostanie odrzucona, jeśli dane wejściowe zostaną odrzucone.

Użyj tego, aby stwierdzić, że odczyt lub zapis bazy danych powiódł się:

firebase.assertSucceeds(app.database().ref("public").once("value"));

Magazyn w chmurze

Magazyn w chmurze

initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp

Użyj tego, aby utworzyć aplikację uwierzytelnioną jako określony użytkownik do użycia w testach.

Zwraca zainicjowaną aplikację Firebase odpowiadającą nazwie zasobnika pamięci i zastąpieniu zmiennej autoryzacji określonej 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 do testów.

Zwraca zainicjowaną aplikację Firebase administratora odpowiadającą nazwie zasobnika pamięci określonej w opcjach. Ta aplikacja omija reguły bezpieczeństwa podczas odczytu i zapisu w zasobniku.

firebase.initializeAdminApp({ storageBucket: "my-bucket" });

loadStorageRules({ storageBucket: string, rules: Object }) => Promise

Użyj tego, aby ustawić reguły swojego zasobnika na dane.

Wysyła reguły do ​​lokalnie zarządzanych zasobników pamięci masowej. Pobiera obiekt opcji, który określa „storageBucket” i „reguły” jako ciągi znaków.

firebase
      .loadStorageRules({
        storageBucket: "my-bucket",
        rules: fs.readFileSync("/path/to/storage.rules", "utf8")
      });

apps() => [FirebaseApp]

Zwraca wszystkie aktualnie zainicjowane aplikacje testowe i administracyjne.

Użyj tego, aby wyczyścić aplikacje między testami lub po nich (zwróć uwagę, że zainicjowane aplikacje z aktywnymi odbiornikami uniemożliwiają zamknięcie JavaScript):

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

assertFails(pr: Promise) => Promise

Zwraca obietnicę, która jest odrzucana, jeśli dane wejściowe powiedzą się i powiedzie się, jeśli dane wejściowe zostaną odrzucone.

Użyj tego, aby stwierdzić, że odczyt lub zapis zasobnika pamięci nie powiódł się:

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

assertSucceeds(pr: Promise) => Promise

Zwraca obietnicę, która powiedzie się, jeśli dane wejściowe powiedzą się i zostanie odrzucona, jeśli dane wejściowe zostaną odrzucone.

Użyj tego, aby upewnić się, że odczyt lub zapis zasobnika pamięci powiódł się:

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