Tworzenie testów jednostkowych

Firebase Local Emulator Suite ułatwiają pełną weryfikację funkcji i działania aplikacji. Jest to też świetne narzędzie do weryfikowania konfiguracji usługi Firebase Security Rules. Używaj emulatorów Firebase do uruchamiania i automatyzowania testów jednostkowych w środowisku lokalnym. Metody opisane w tym dokumencie powinny pomóc Ci podczas tworzenia i automatyzowania testów jednostkowych dla Twojej aplikacji, które weryfikują Rules.

Jeśli jeszcze tego nie zrobisz, skonfiguruj emulatory Firebase.

Przed uruchomieniem emulatora

Zanim zaczniesz korzystać z emulatora, pamiętaj o tych kwestiach:

  • Emulator początkowo wczyta reguły określone w polu firestore.rules lub storage.rules w pliku firebase.json. Jeśli plik nie istnieje, a nie używasz metody loadFirestoreRules ani loadStorageRules opisanej poniżej, emulator traktuje wszystkie projekty jako mające otwarte reguły.
  • Chociaż większość pakietów Firebase SDK współpracuje bezpośrednio z emulatorami, tylko biblioteka @firebase/rules-unit-testing obsługuje tworzenie kopii zapasowych auth w regułach zabezpieczeń, co znacznie ułatwia przeprowadzanie testów jednostkowych. Ponadto biblioteka obsługuje kilka funkcji specyficznych dla emulatorów, jak np. czyszczenie wszystkich danych, jak wymieniono poniżej.
  • Emulatory będą również akceptować produkcyjne tokeny uwierzytelniania Firebase dostarczane za pośrednictwem zestawów SDK klienta i odpowiednio oceniać reguły, co pozwoli na bezpośrednie połączenie aplikacji z emulatorami podczas testów integracyjnych i ręcznych.

Różnice między emulatorami baz danych a środowiskiem produkcyjnym

  • Nie musisz jawnie tworzyć instancji bazy danych. Emulator automatycznie utworzy każdą instancję bazy danych, do której użytkownik uzyska dostęp.
  • Każda nowa baza danych jest tworzona 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 stosuje limity i kwoty planu Spark (co najważniejsze, ogranicza ono każdą instancję do 100 równoczesnych połączeń).
  • Każda baza danych zaakceptuje ciąg "owner" jako token uwierzytelniający administratora.
  • Emulatory nie współpracują obecnie z innymi produktami Firebase. Warto zauważyć, że standardowy 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 przeszedł uwierzytelnienie jako dowolna podana jednostka. Jeśli przekażesz null, będzie się zachowywać jak użytkownik niezautoryzowany (np. reguły auth != null zakończą się niepowodzeniem).

Interakcja z emulatorem Realtime Database

Instancja produkcyjna FirebaseRealtime Database jest dostępna w subdomenie firebaseio.com, a do interfejsu REST API możesz 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 wchodzić w interakcje z konkretną instancją 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>

Uruchamianie lokalnych testów jednostkowych za pomocą pakietu SDK w JavaScript w wersji 9

Firebase udostępnia bibliotekę testów jednostkowych reguł zabezpieczeń w pakiecie JavaScript SDK w wersji 9 i w pakiecie SDK w wersji 8. Interfejsy API bibliotek znacznie się różnią. Zalecamy bibliotekę testową v9, która jest bardziej uproszczona i wymaga mniejszej liczby konfiguracji w celu połączenia z emulatorami, dzięki czemu można bezpiecznie uniknąć przypadkowego użycia zasobów produkcyjnych. Aby zapewnić wsteczną zgodność, nadal udostępniamy bibliotekę testową v8.

Użyj modułu @firebase/rules-unit-testing, aby korzystać z emulatora działającego lokalnie. Jeśli pojawiają się komunikaty o przekroczeniu limitu czasu lub błędy ECONNREFUSED, sprawdź dokładnie, czy emulator faktycznie działa.

Zdecydowanie zalecamy korzystanie z najnowszej wersji Node.js, aby móc używać notacji async/await. Prawie wszystkie działania, które możesz chcieć przetestować, obejmują funkcje asynchroniczne, a moduł testowy jest przeznaczony do pracy z kodem opartym na obietnicach.

Biblioteka v9 Rules Unit Testing zawsze jest świadoma emulatorów i nigdy nie korzysta z zasobów produkcyjnych.

Bibliotekę importuje się za pomocą modularnych poleceń importu 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 wdrożenie testów jednostkowych obejmuje:

  • Tworzenie i konfigurowanie RulesTestEnvironment z wywołaniem funkcji initializeTestEnvironment.
  • Konfigurowanie danych testowych bez wywoływania Rules za pomocą wygodnej metody, która pozwala tymczasowo je pominąć, RulesTestEnvironment.withSecurityRulesDisabled.
  • Konfigurowanie pakietu testów i funkcji wywoływanych przed i po każdym teście z wywołaniami funkcji czyszczących dane testowe i środowisko, np. RulesTestEnvironment.cleanup() lub RulesTestEnvironment.clearFirestore().
  • Wdrażanie przypadków testowych, które naśladują stany uwierzytelniania za pomocą funkcji RulesTestEnvironment.authenticatedContext i RulesTestEnvironment.unauthenticatedContext.

Typowe metody i funkcje narzędziowe

Zobacz też metody testowania specyficzne dla emulatora za pomocą modułowego interfejsu API.

initializeTestEnvironment() => RulesTestEnvironment

Ta funkcja inicjuje środowisko testowe do testowania jednostkowego reguł. Wywołaj tę funkcję najpierw w celu przeprowadzenia konfiguracji testowej. Aby wykonać poprawnie, konieczne jest uruchomienie emulatorów.

Funkcja akceptuje opcjonalny obiekt definiujący TestEnvironmentConfig, który może składać się z identyfikatora projektu i ustawień konfiguracji emulatora.

let testEnv = await initializeTestEnvironment({
  projectId: "demo-project-1234",
  firestore: {
    rules: fs.readFileSync("firestore.rules", "utf8"),
  },
});

między poszczególnymi testami, wywołaj odpowiednią metodę czyszczenia danych emulatora, np. clearFirestoreData.

RulesTestEnvironment.authenticatedContext({ user_id: string, tokenOptions?: TokenOptions }) => RulesTestContext

Ta metoda tworzy obiekt RulesTestContext, który działa jak uwierzytelniony użytkownik Authentication. Żądania utworzone za pomocą zwróconego kontekstu będą miały dołączony token mockAuthentication. Opcjonalnie możesz przekazać obiekt definiujący niestandardowe roszczenia lub zastąpienia dla Authentication ładunków tokena.

Użyj zwróconego obiektu kontekstu testowego w testach, aby uzyskać dostęp do skonfigurowanych instancji emulatora, w tym 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().doc('/users/alice'), { ... });

RulesTestEnvironment.unauthenticatedContext() => RulesTestContext

Ta metoda tworzy RulesTestContext, który zachowuje się jak klient, który nie jest zalogowany przez Authentication. Żądania utworzone za pomocą zwróconego kontekstu nie będą miały dołączonych tokenów uwierzytelniania Firebase.

Użyj zwróconego obiektu kontekstu testowego w testach, aby uzyskać dostęp do skonfigurowanych instancji emulatora, w tym 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ę 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 przyjmuje kontekst omijania zasad bezpieczeństwa i zwraca obietnicę. Kontekst zostanie zniszczony, gdy obietnica zostanie spełniona lub odrzucona.

RulesTestEnvironment.cleanup()

Ta metoda usuwa wszystkie obiekty RulesTestContexts utworzone w środowisku testowym i czyści zasoby bazowe, co umożliwia prawidłowe zakończenie działania.

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 narzędziowa testu.

Funkcja ta potwierdza, że dostarczona obietnica obejmują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 pomocnicza przypadku testowego.

Funkcja sprawdza, czy podana obietnica opakowująca operację emulatora zostanie odrzucona z powodu naruszenia reguł zabezpieczeń.

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

Metody specyficzne dla emulatora

Zobacz też typowe metody testowania i funkcje narzędziowe korzystające z modułowego interfejsu API.

Cloud Firestore

Cloud Firestore

RulesTestEnvironment.clearFirestore() => Promise<void>

Ta metoda usuwa dane z bazy danych Firestore należące do projektuprojectId skonfigurowanego na potrzeby emulatora Firestore.

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

Ta metoda pobiera instancję Firestore dla tego kontekstu testu. Zwróconą instancję Firebase JS Client SDK można wykorzystać z interfejsami API klienckiego SDK (wersja modułowa v9 lub zgodna z v9).

Realtime Database

Realtime Database

RulesTestEnvironment.clearDatabase() => Promise<void>

Ta metoda usuwa dane z Realtime Database należące do projectId skonfigurowanego na potrzeby emulatora Realtime Database.

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

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

Cloud Storage

Cloud Storage

RulesTestEnvironment.clearStorage() => Promise<void>

Ta metoda czyści obiekty i metadane w kontenerach pamięci masowej należących do projectId skonfigurowanych dla emulatora Cloud Storage.

RulesTestContext.storage(bucketUrl?: string) => Firebase Storage;

Ta metoda zwraca instancję Storage skonfigurowaną do łączenia się z emulatorem. Metoda akceptuje adres URL gs:// do obiektu Firebase Storage Bucket w celu przetestowania. Jeśli określono, zwraca instancję magazynu dla emulowanej wersji nazwy kontenera.

Uruchamianie lokalnych testów jednostkowych za pomocą pakietu SDK JavaScript v8

Wybierz usługę, aby zobaczyć metody używane przez pakiet Firebase Test SDK do komunikacji 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, która będzie używana w testach.

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 omija reguły bezpieczeństwa podczas odczytu i zapisu. Użyj tej metody, aby utworzyć aplikację uwierzytelnioną jako administrator, która będzie ustawiać stan testów.

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

apps() => [FirebaseApp] Ta metoda zwraca wszystkie aktualnie zainicjowane aplikacje testowe i administracyjne. Używaj tej opcji do czyszczenia aplikacji 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 lokalnie działającej bazy danych. 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ą poprawne, albo jest udana, jeśli dane wejściowe zostaną odrzucone. Użyj tego, aby sprawdzić, czy odczyt lub zapis bazy danych się nie powiedzie.

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

assertSucceeds(pr: Promise) => Promise

Ta metoda zwraca obietnicę, która zostaje spełniona, jeśli dane wejściowe są poprawne, lub zostaje odrzucona, jeśli dane wejściowe zostaną odrzucone. Użyj tego, 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 określonym projektem w lokalnie działającej instancji Firestore. Użyj tej metody, aby wyczyścić dane po testach.

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

Realtime Database

Realtime Database

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

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

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

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

Użyj tej metody, aby utworzyć aplikację uwierzytelnioną jako administrator, która skonfiguruje stan testów.

Zwraca zainicjowaną aplikację administracyjną Firebase odpowiadającą nazwie bazy danych określonej w opcjach. Ta aplikacja pomija reguły zabezpieczeń podczas odczytywania i zapisywania danych 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 lokalnie działającej bazy danych. Przyjmuje obiekt opcji, który określa „databaseName” i „rules” 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 metody, aby wyczyścić aplikacje między testami lub po nich (pamiętaj, że zainicjowane aplikacje z aktywnymi odbiornikami uniemożliwiają zamknięcie JavaScriptu):

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

assertFails(pr: Promise) => Promise

Zwraca obietnicę, która jest odrzucana, jeśli dane wejściowe zostaną zaakceptowane, i akceptowana, 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 jest spełniona, jeśli dane wejściowe są spełnione, i odrzucona, jeśli dane wejściowe są odrzucone.

Użyj tego, aby potwierdzić, że odczyt lub zapis bazy danych zakończył się powodzeniem:

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, która będzie używana w testach.

Zwraca zainicjowaną aplikację Firebase odpowiadającą nazwie zasobnika pamięci i zastąpieniu zmiennej uwierzytelniania określonym w opcjach.

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

Użyj tej metody, aby utworzyć aplikację uwierzytelnioną jako administrator, która skonfiguruje stan testów.

Zwraca zainicjowaną aplikację Firebase administratora odpowiadającą nazwie zasobnika pamięci podanej w opcjach. Ta aplikacja pomija reguły zabezpieczeń podczas odczytywania i zapisywania danych w zasobniku.

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

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

Użyj tego ustawienia, aby określić reguły zasobnika pamięci.

Wysyła reguły do lokalnie zarządzanych kontenerów pamięci masowej. 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 aktualnie zainicjowane aplikacje testowe i administracyjne.

Użyj tej metody, aby wyczyścić aplikacje między testami lub po nich (pamiętaj, że zainicjowane aplikacje z aktywnymi odbiornikami uniemożliwiają zamknięcie JavaScriptu):

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

assertFails(pr: Promise) => Promise

Zwraca obietnicę, która jest odrzucana, jeśli dane wejściowe się powiodą, i jest potwierdzona, 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 jest spełniona, jeśli dane wejściowe są spełnione, i odrzucona, jeśli dane wejściowe są odrzucone.

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

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

Interfejs API biblioteki RUT dla pakietu SDK w JS w wersji 8

Wybierz usługę, aby zobaczyć metody używane przez pakiet Firebase Test SDK do komunikacji 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, która będzie używana w testach.

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 omija reguły bezpieczeństwa podczas odczytu i zapisu. Użyj tej metody, aby utworzyć aplikację uwierzytelnioną jako administrator, która będzie ustawiać stan testów.

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

apps() => [FirebaseApp] Ta metoda zwraca wszystkie aktualnie zainicjowane aplikacje testowe i administracyjne. Używaj tej opcji do czyszczenia aplikacji 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 lokalnie działającej bazy danych. 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ą poprawne, albo jest udana, jeśli dane wejściowe zostaną odrzucone. Użyj tego, aby sprawdzić, czy odczyt lub zapis bazy danych się nie powiedzie.

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

assertSucceeds(pr: Promise) => Promise

Ta metoda zwraca obietnicę, która zostaje spełniona, jeśli dane wejściowe są poprawne, lub zostaje odrzucona, jeśli dane wejściowe zostaną odrzucone. Użyj tego, 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 określonym projektem w lokalnie działającej instancji Firestore. Użyj tej metody, aby wyczyścić dane po testach.

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

Realtime Database

Realtime Database

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

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

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

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

Użyj tej metody, aby utworzyć aplikację uwierzytelnioną jako administrator, która skonfiguruje stan testów.

Zwraca zainicjowaną aplikację administracyjną Firebase odpowiadającą nazwie bazy danych określonej w opcjach. Ta aplikacja pomija reguły zabezpieczeń podczas odczytywania i zapisywania danych 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 lokalnie działającej bazy danych. Przyjmuje obiekt opcji, który określa „databaseName” i „rules” 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 metody, aby wyczyścić aplikacje między testami lub po nich (pamiętaj, że zainicjowane aplikacje z aktywnymi odbiornikami uniemożliwiają zamknięcie JavaScriptu):

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

assertFails(pr: Promise) => Promise

Zwraca obietnicę, która jest odrzucana, jeśli dane wejściowe zostaną zaakceptowane, i akceptowana, 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 jest spełniona, jeśli dane wejściowe są spełnione, i odrzucona, jeśli dane wejściowe są odrzucone.

Użyj tego, aby potwierdzić, że odczyt lub zapis bazy danych zakończył się powodzeniem:

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, która będzie używana w testach.

Zwraca zainicjowaną aplikację Firebase odpowiadającą nazwie zasobnika pamięci i zastąpieniu zmiennej uwierzytelniania określonym w opcjach.

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

Użyj tej metody, aby utworzyć aplikację uwierzytelnioną jako administrator, która skonfiguruje stan testów.

Zwraca zainicjowaną aplikację Firebase administratora odpowiadającą nazwie zasobnika pamięci podanej w opcjach. Ta aplikacja pomija reguły zabezpieczeń podczas odczytywania i zapisywania danych w zasobniku.

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

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

Użyj tego ustawienia, aby określić reguły zasobnika pamięci.

Wysyła reguły do lokalnie zarządzanych kontenerów pamięci masowej. 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 aktualnie zainicjowane aplikacje testowe i administracyjne.

Użyj tej metody, aby wyczyścić aplikacje między testami lub po nich (pamiętaj, że zainicjowane aplikacje z aktywnymi odbiornikami uniemożliwiają zamknięcie JavaScriptu):

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

assertFails(pr: Promise) => Promise

Zwraca obietnicę, która jest odrzucana, jeśli dane wejściowe się powiodą, i jest potwierdzona, 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 jest spełniona, jeśli dane wejściowe są spełnione, i odrzucona, jeśli dane wejściowe są odrzucone.

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

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