Zbuduj testy jednostkowe

Pakiet Firebase Local Emulator Suite ułatwia pełną weryfikację funkcji i zachowania aplikacji. Jest to także świetne narzędzie do sprawdzania konfiguracji reguł zabezpieczeń Firebase. Użyj emulatorów Firebase, aby uruchamiać i automatyzować testy jednostkowe w środowisku lokalnym. Metody opisane w tym dokumencie powinny pomóc Ci podczas tworzenia i automatyzacji testów jednostkowych dla aplikacji, które sprawdzają Twoje Reguły.

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

Zanim uruchomisz emulator

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żyjesz metody loadFirestoreRules lub „loadStorageRules”, jak opisano poniżej, emulator traktuje wszystkie projekty jako posiadające otwarte reguły.
  • Chociaż większość zestawów SDK Firebase współpracuje bezpośrednio z emulatorami, tylko biblioteka @firebase/rules-unit-testing obsługuje szydercze 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 dostarczone przez zestawy 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 pomiędzy emulatorami baz danych a produkcją

  • Nie musisz jawnie tworzyć instancji bazy danych. Emulator automatycznie utworzy każdą instancję bazy danych, do której uzyskano dostęp.
  • 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 (w szczególności ogranicza to każdą instancję do 100 jednoczesnych połączeń).
  • Każda baza danych zaakceptuje ciąg "owner" jako token autoryzacji administratora.
  • Emulatory nie współdziałają obecnie z innymi produktami Firebase. Warto zauważyć, że normalny proces uwierzytelniania Firebase nie działa. Zamiast tego możesz użyć metody initializeTestApp() z biblioteki rules-unit-testing , która przyjmuje pole auth . Obiekt Firebase utworzony przy użyciu tej metody zachowuje się tak, jakby pomyślnie uwierzytelnił się jako dowolny podany obiekt. Jeśli przekażesz null , będzie on zachowywał się jak nieuwierzytelniony użytkownik (na przykład reguły auth != null nie powiodą się).

Interakcja z emulatorem bazy danych czasu rzeczywistego

Produkcyjna instancja bazy danych Firebase Realtime Database jest dostępna w subdomenie firebaseio.com , a dostęp do interfejsu API REST można uzyskać 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 w celu określenia nazwy bazy danych.

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

Uruchom lokalne testy jednostkowe za pomocą pakietu JavaScript SDK 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ę od siebie różnią. Polecamy bibliotekę testową v9, która jest bardziej usprawniona i wymaga mniej konfiguracji, aby połączyć się z emulatorami, a tym samym bezpiecznie uniknąć przypadkowego użycia zasobów produkcyjnych. Aby zapewnić kompatybilność wsteczną, nadal udostępniamy bibliotekę testową v8 .

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

Zdecydowanie zalecamy korzystanie z najnowszej wersji Node.js, aby móc używać notacji async/await . Prawie wszystkie zachowania, które warto przetestować, obejmują funkcje asynchroniczne, a moduł testowy został zaprojektowany do pracy z kodem opartym na obietnicach.

Biblioteka do testowania jednostek reguł w wersji 9 zawsze wie o emulatorach i nigdy nie wpływa na zasoby produkcyjne.

Bibliotekę importujesz za pomocą instrukcji importu modułowego w wersji 9. 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 initializeTestEnvironment .
  • Konfigurowanie danych testowych bez wyzwalania reguł przy użyciu wygodnej metody umożliwiającej tymczasowe ich ominięcie, RulesTestEnvironment.withSecurityRulesDisabled .
  • Konfigurowanie zestawu testów i zaczepów przed/po każdym teście z wywołaniami do czyszczenia danych testowych i środowiska, np RulesTestEnvironment.cleanup() lub RulesTestEnvironment.clearFirestore() .
  • Implementowanie przypadków testowych naśladujących 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 do testowania jednostkowego reguł. Najpierw wywołaj tę funkcję 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óry zachowuje się jak uwierzytelniony użytkownik uwierzytelniający. Żądania utworzone za pośrednictwem zwróconego kontekstu będą miały dołączony próbny token uwierzytelniający. Opcjonalnie przekaż obiekt definiujący niestandardowe oświadczenia lub zastąpienia ładunków tokenu uwierzytelniania.

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

Użyj zwróconego obiektu kontekstu testowego w swoich testach, aby uzyskać dostęp do dowolnych skonfigurowanych wystąpień emulatora, w tym tych skonfigurowanych z 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 zabezpieczeń były wyłączone.

Ta metoda przyjmuje funkcję wywołania zwrotnego, która pobiera kontekst omijania reguł zabezpieczeń i zwraca obietnicę. Kontekst zostanie zniszczony, gdy obietnica zostanie rozpatrzona/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 pomiędzy testami, użyj metody czyszczenia danych specyficznej dla emulatora aplikacji.

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

Jest to funkcja użyteczności przypadku testowego.

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

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

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

Jest to funkcja użyteczności przypadku testowego.

Funkcja zapewnia, że ​​dostarczona obietnica otaczająca operację emulatora zostanie odrzucona z powodu naruszenia reguł bezpieczeństwa.

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

Metody specyficzne dla emulatora

Zobacz także typowe metody testowe i funkcje narzędziowe wykorzystujące modułowe API .

Chmura Firestore

Chmura Firestore

RulesTestEnvironment.clearFirestore() => Promise<void>

Ta metoda czyści dane w bazie danych Firestore należące do projectId skonfigurowanego dla emulatora Firestore.

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

Ta metoda pobiera instancję Firestore dla tego kontekstu testowego. Zwróconej instancji pakietu SDK klienta Firebase JS można używać z interfejsami API pakietu SDK klienta (wersja modułowa lub kompatybilna z wersją 9).

Baza danych czasu rzeczywistego

Baza danych czasu rzeczywistego

RulesTestEnvironment.clearDatabase() => Promise<void>

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

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

Pobierz instancję bazy danych czasu rzeczywistego dla tego kontekstu testowego. Zwróconej instancji pakietu SDK klienta Firebase JS można używać z interfejsami API klienta SDK (modułowymi lub z przestrzenią nazw, wersja 9 lub nowsza). Metoda akceptuje adres URL instancji Realtime Database. Jeśli jest określony, zwraca instancję 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 instancję magazynu skonfigurowaną do łączenia się z emulatorem. Metoda akceptuje adres URL gs:// do zasobnika pamięci Firebase w celu przetestowania. Jeśli jest określony, zwraca instancję Storage dla emulowanej wersji nazwy zasobnika.

Uruchom testy jednostek lokalnych za pomocą zestawu SDK języka JavaScript w wersji 8

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

Chmura Firestore

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

Ta metoda zwraca zainicjowaną aplikację Firebase odpowiadającą identyfikatorowi projektu i zmiennej uwierzytelniającej określonej w opcjach. Użyj tego, aby utworzyć aplikację uwierzytelnioną jako konkretny 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 reguły bezpieczeństwa podczas wykonywania odczytu i zapisu. Użyj tego, aby utworzyć aplikację uwierzytelnioną jako administrator w celu ustawienia stanu na potrzeby testów.

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

apps() => [FirebaseApp] Ta metoda zwraca wszystkie aktualnie zainicjowane aplikacje testowe i administracyjne. Użyj tej opcji, aby wyczyścić aplikacje pomię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 ​​lokalnie działającej bazy danych. Pobiera obiekt, który określa reguły w postaci ciągu 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 zostaje odrzucona, jeśli dane wejściowe się powiedzie, lub która zakończy się pomyślnie, jeśli dane wejściowe zostaną odrzucone. Użyj tego, aby sprawdzić, 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 zakończy się pomyślnie, jeśli dane wejściowe się powiodą, i zostanie odrzucona, jeśli dane wejściowe zostaną odrzucone. Użyj tego, aby sprawdzić, czy odczyt lub zapis bazy danych powiedzie się.

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

clearFirestoreData({ projectId: string }) => Promise

Ta metoda usuwa wszystkie dane powiązane z konkretnym projektem w lokalnie działającej instancji Firestore. Użyj tej metody do oczyszczenia 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 konkretny użytkownik do użycia w testach.

Zwraca zainicjowaną aplikację Firebase odpowiadającą nazwie bazy danych i zastąpieniu zmiennej uwierzytelniającej 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 w celu skonfigurowania stanu do testów.

Zwraca zainicjowaną aplikację administratora Firebase odpowiadającą nazwie bazy danych określonej w opcjach. Ta aplikacja omija zasady 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 bazy danych.

Wysyła reguły do ​​lokalnie działającej 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 tej opcji, aby wyczyścić aplikacje pomiędzy testami lub po nich (pamiętaj, że zainicjowane aplikacje z aktywnymi słuchaczami uniemożliwiają wyjście z JavaScript):

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

assertFails(pr: Promise) => Promise

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

Użyj tego, aby potwierdzić, ż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 zakończy się pomyślnie, jeśli dane wejściowe się powiodą, i zostanie odrzucona, jeśli dane wejściowe zostaną odrzucone.

Użyj tego, aby upewnić się, ż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 konkretny użytkownik do użycia w testach.

Zwraca zainicjowaną aplikację Firebase odpowiadającą nazwie zasobnika pamięci i zastąpieniu zmiennej uwierzytelniania 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 w celu skonfigurowania stanu do testów.

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

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

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

Użyj tego, aby ustawić reguły dotyczące zasobnika na dane.

Wysyła reguły do ​​lokalnie zarządzanych zasobników pamięci. 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 tej opcji, aby wyczyścić aplikacje pomiędzy testami lub po nich (pamiętaj, że zainicjowane aplikacje z aktywnymi słuchaczami uniemożliwiają wyjście z JavaScript):

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

assertFails(pr: Promise) => Promise

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

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

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

assertSucceeds(pr: Promise) => Promise

Zwraca obietnicę, która zakończy się pomyślnie, jeśli dane wejściowe się powiodą, i zostanie odrzucona, jeśli dane wejściowe zostaną odrzucone.

Użyj tego, aby upewnić się, że odczyt lub zapis wiadra pamięci powiodły 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 SDK Firebase Test do łączenia się z emulatorem.

Chmura Firestore

Chmura Firestore

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

Ta metoda zwraca zainicjowaną aplikację Firebase odpowiadającą identyfikatorowi projektu i zmiennej uwierzytelniającej określonej w opcjach. Użyj tego, aby utworzyć aplikację uwierzytelnioną jako konkretny 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 reguły bezpieczeństwa podczas wykonywania odczytu i zapisu. Użyj tego, aby utworzyć aplikację uwierzytelnioną jako administrator w celu ustawienia stanu na potrzeby testów.

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

apps() => [FirebaseApp] Ta metoda zwraca wszystkie aktualnie zainicjowane aplikacje testowe i administracyjne. Użyj tej opcji, aby wyczyścić aplikacje pomię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 ​​lokalnie działającej bazy danych. Pobiera obiekt, który określa reguły w postaci ciągu 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 zostaje odrzucona, jeśli dane wejściowe się powiedzie, lub która zakończy się pomyślnie, jeśli dane wejściowe zostaną odrzucone. Użyj tego, aby sprawdzić, 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 zakończy się pomyślnie, jeśli dane wejściowe się powiodą, i zostanie odrzucona, jeśli dane wejściowe zostaną odrzucone. Użyj tego, aby sprawdzić, czy odczyt lub zapis bazy danych powiedzie się.

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

clearFirestoreData({ projectId: string }) => Promise

Ta metoda usuwa wszystkie dane powiązane z konkretnym projektem w lokalnie działającej instancji Firestore. Użyj tej metody do oczyszczenia 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 konkretny użytkownik do użycia w testach.

Zwraca zainicjowaną aplikację Firebase odpowiadającą nazwie bazy danych i zastąpieniu zmiennej uwierzytelniającej 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 w celu skonfigurowania stanu do testów.

Zwraca zainicjowaną aplikację administratora Firebase odpowiadającą nazwie bazy danych określonej w opcjach. Ta aplikacja omija zasady 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 bazy danych.

Wysyła reguły do ​​lokalnie działającej 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 tej opcji, aby wyczyścić aplikacje pomiędzy testami lub po nich (pamiętaj, że zainicjowane aplikacje z aktywnymi słuchaczami uniemożliwiają wyjście z JavaScript):

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

assertFails(pr: Promise) => Promise

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

Użyj tego, aby potwierdzić, ż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 zakończy się pomyślnie, jeśli dane wejściowe się powiodą, i zostanie odrzucona, jeśli dane wejściowe zostaną odrzucone.

Użyj tego, aby upewnić się, ż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 konkretny użytkownik do użycia w testach.

Zwraca zainicjowaną aplikację Firebase odpowiadającą nazwie zasobnika pamięci i zastąpieniu zmiennej uwierzytelniania 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 w celu skonfigurowania stanu do testów.

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

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

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

Użyj tego, aby ustawić reguły dotyczące zasobnika na dane.

Wysyła reguły do ​​lokalnie zarządzanych zasobników pamięci. 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 tej opcji, aby wyczyścić aplikacje pomiędzy testami lub po nich (pamiętaj, że zainicjowane aplikacje z aktywnymi słuchaczami uniemożliwiają wyjście z JavaScript):

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

assertFails(pr: Promise) => Promise

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

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

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

assertSucceeds(pr: Promise) => Promise

Zwraca obietnicę, która zakończy się pomyślnie, jeśli dane wejściowe się powiodą, i zostanie odrzucona, jeśli dane wejściowe zostaną odrzucone.

Użyj tego, aby upewnić się, że odczyt lub zapis wiadra pamięci powiodły się:

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