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 w tworzeniu i automatyzowaniu testów jednostkowych 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 SDK Firebase działa bezpośrednio z emulatorami, tylko biblioteka @firebase/rules-unit-testing obsługuje tworzenie wersji próbnych auth w regułach zabezpieczeń, co znacznie ułatwia testy jednostkowe. Dodatkowo biblioteka obsługuje kilka funkcji specyficznych dla emulatora, takich jak czyszczenie wszystkich danych, jak wymieniono poniżej.
  • Emulatory będą też akceptować tokeny uwierzytelniania Firebase w wersji produkcyjnej dostarczane przez pakiety SDK klienta i odpowiednio oceniać reguły, co umożliwia bezpośrednie łączenie aplikacji z emulatorami w testach 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 uzyskuje 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 podlega limitom i kwotom abonamentu Spark (w szczególności ogranicza to każdą instancję do 100 jednoczesnych połączeń).
  • Każda baza danych zaakceptuje ciąg znaków "owner" jako token uwierzytelniania administratora.
  • Emulatory nie mają obecnie działających interakcji z innymi usługami Firebase. W szczególności nie działa normalny przepływ uwierzytelniania Firebase. Zamiast tego możesz użyć metody initializeTestApp() w bibliotece rules-unit-testing, która przyjmuje pole auth. Obiekt Firebase utworzony za pomocą tej metody zachowuje się tak, jakby uwierzytelnianie zostało przeprowadzone z użyciem podanego przez Ciebie podmiotu. Jeśli przekażesz wartość null, będzie to traktowane jako użytkownik nieuwierzytelniony (np. reguły auth != null nie będą działać).

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>

Przeprowadzanie 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 biblioteki znacznie się od siebie różnią. Zalecamy korzystanie z biblioteki testowej w wersji 9, 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ć 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 wystąpią przekroczenia limitu czasu lub błędy ECONNREFUSED, sprawdź, czy emulator jest uruchomiony.

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 testów jednostkowych reguł w wersji 9 zawsze rozpoznaje emulatory i nigdy nie korzysta z 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 implementacja 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ł. Najpierw wywołaj tę funkcję, aby skonfigurować test. Aby wykonanie się powiodło, emulatory muszą być uruchomione.

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"),
  },
});

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ą zawierać token Authentication. Opcjonalnie możesz przekazać obiekt definiujący niestandardowe roszczenia lub zastąpienia dla ładunków tokenów Authentication.

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(), '/users/alice'), { ... });

RulesTestEnvironment.unauthenticatedContext() => RulesTestContext

Ta metoda tworzy obiekt RulesTestContext, który działa jak klient niezalogowany za pomocą 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 Security-Rules-bypassing i zwraca obietnicę. Kontekst zostanie zniszczony po rozwiązaniu lub odrzuceniu obietnicy.

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 sprawdza, czy podany obiekt Promise opakowujący operację emulatora zostanie rozwiązany bez naruszenia reguł bezpieczeństwa.

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

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

Jest to funkcja narzędziowa testu.

Funkcja sprawdza, czy podany obiekt Promise opakowujący operację emulatora zostanie odrzucony 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 testowego. Zwrócona instancja pakietu Firebase JS Client SDK może być używana z interfejsami API pakietu SDK klienta (modułowego w wersji 9 lub zgodnego z wersją 9).

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 instancję Realtime Database dla tego kontekstu testowego. Zwrócona instancja pakietu Firebase JS Client SDK może być używana 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 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 usługi projectId skonfigurowanej dla emulatora Cloud Storage.

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

Ta metoda zwraca instancję Storage skonfigurowaną do łączenia się z emulatorem. Metoda akceptuje gs:// adres URL zasobnika Firebase Storage do testowania. Jeśli zostanie podana, zwraca instancję Storage dla emulowanej wersji nazwy zasobnika.

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ę Firebase administratora. Podczas odczytu i zapisu pomija ona reguły zabezpieczeń. Użyj tego, 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ą prawidłowe, lub która jest spełniana, jeśli dane wejściowe są nieprawidłowe. Użyj tego, aby sprawdzić, czy odczyt lub zapis w bazie danych się nie powiódł.

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

assertSucceeds(pr: Promise) => Promise

Ta metoda zwraca obietnicę, która jest spełniana, jeśli dane wejściowe są spełnione, i odrzucana, jeśli dane wejściowe są odrzucane. Użyj tego, aby sprawdzić, czy odczyt lub zapis w bazie danych się powiódł.

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 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 bazy danych i zastąpieniu zmiennej auth określonym w opcjach.

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

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

Zwraca zainicjowaną aplikację Firebase administratora 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 tej opcji, aby ustawić reguły 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 funkcji, 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 są przetwarzane pomyślnie, i przetwarzana pomyślnie, jeśli dane wejściowe są odrzucane.

Użyj tego, aby sprawdzić, czy odczyt lub zapis w bazie danych się nie powiódł:

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 w bazie danych się powiódł:

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 administratora, która skonfiguruje stan testów.

Zwraca zainicjowaną aplikację Firebase w wersji administracyjnej 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 zasobników na dane zarządzanych lokalnie. Przyjmuje obiekt opcji, który określa „storageBucket” i „rules” jako ciągi znaków.

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

apps() => [FirebaseApp]

Zwraca wszystkie aktualnie zainicjowane aplikacje testowe i administracyjne.

Użyj tej funkcji, 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 są przetwarzane pomyślnie, i przetwarzana pomyślnie, jeśli dane wejściowe są odrzucane.

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 JS SDK 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ę Firebase administratora. Podczas odczytu i zapisu pomija ona reguły zabezpieczeń. Użyj tego, 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ą prawidłowe, lub która jest spełniana, jeśli dane wejściowe są nieprawidłowe. Użyj tego, aby sprawdzić, czy odczyt lub zapis w bazie danych się nie powiódł.

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

assertSucceeds(pr: Promise) => Promise

Ta metoda zwraca obietnicę, która jest spełniana, jeśli dane wejściowe są spełnione, i odrzucana, jeśli dane wejściowe są odrzucane. Użyj tego, aby sprawdzić, czy odczyt lub zapis w bazie danych się powiódł.

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 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 bazy danych i zastąpieniu zmiennej auth określonym w opcjach.

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

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

Zwraca zainicjowaną aplikację Firebase administratora 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 tej opcji, aby ustawić reguły 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 funkcji, 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 są przetwarzane pomyślnie, i przetwarzana pomyślnie, jeśli dane wejściowe są odrzucane.

Użyj tego, aby sprawdzić, czy odczyt lub zapis w bazie danych się nie powiódł:

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 w bazie danych się powiódł:

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 administratora, która skonfiguruje stan testów.

Zwraca zainicjowaną aplikację Firebase w wersji administracyjnej 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 zasobników na dane zarządzanych lokalnie. Przyjmuje obiekt opcji, który określa „storageBucket” i „rules” jako ciągi znaków.

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

apps() => [FirebaseApp]

Zwraca wszystkie aktualnie zainicjowane aplikacje testowe i administracyjne.

Użyj tej funkcji, 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 są przetwarzane pomyślnie, i przetwarzana pomyślnie, jeśli dane wejściowe są odrzucane.

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());