Połącz swoją aplikację z emulatorem bazy danych czasu rzeczywistego

Przed podłączeniem aplikacji do emulatora bazy danych czasu rzeczywistego upewnij się, że rozumiesz ogólny przepływ pracy w pakiecie Firebase Local Emulator Suite oraz że instalujesz i konfigurujesz pakiet Local Emulator Suite oraz przeglądasz jego polecenia CLI .

Wybierz projekt Firebase

Pakiet Firebase Local Emulator Suite emuluje produkty dla pojedynczego projektu Firebase.

Aby wybrać projekt do użycia, przed uruchomieniem emulatorów, w CLI uruchom firebase use w swoim katalogu roboczym. Możesz też przekazać flagę --project do każdego polecenia emulatora.

Local Emulator Suite obsługuje emulację prawdziwych projektów Firebase i projektów demonstracyjnych .

Typ projektu Cechy Używaj z emulatorami
Prawdziwy

Prawdziwy projekt Firebase to taki, który utworzyłeś i skonfigurowałeś (najprawdopodobniej za pomocą konsoli Firebase).

Prawdziwe projekty mają aktywne zasoby, takie jak instancje baz danych, zasobniki pamięci, funkcje lub inne zasoby skonfigurowane dla tego projektu Firebase.

Pracując z prawdziwymi projektami Firebase, możesz uruchomić emulatory dla dowolnego lub wszystkich obsługiwanych produktów.

W przypadku wszystkich produktów, których nie emulujesz, Twoje aplikacje i kod będą wchodzić w interakcję z aktywnym zasobem (instancją bazy danych, zasobnikiem pamięci, funkcją itp.).

Próbny

Projekt demonstracyjny Firebase nie ma prawdziwej konfiguracji Firebase ani aktywnych zasobów. Dostęp do tych projektów można zwykle uzyskać za pośrednictwem ćwiczeń z programowania lub innych samouczków.

Identyfikatory projektów demonstracyjnych mają przedrostek demo- .

Podczas pracy z projektami demonstracyjnymi Firebase Twoje aplikacje i kod wchodzą w interakcję wyłącznie z emulatorami. Jeśli aplikacja podejmie próbę interakcji z zasobem, dla którego nie działa emulator, wykonanie kodu zakończy się niepowodzeniem.

W miarę możliwości zalecamy korzystanie z projektów demonstracyjnych. Korzyści obejmują:

  • Łatwiejsza konfiguracja, ponieważ możesz uruchomić emulatory bez tworzenia projektu Firebase
  • Większe bezpieczeństwo, ponieważ jeśli Twój kod przypadkowo wywoła nieemulowane zasoby (produkcyjne), nie ma szans na zmianę danych, wykorzystanie i rozliczenie
  • Lepsza obsługa w trybie offline, ponieważ nie ma potrzeby dostępu do Internetu, aby pobrać konfigurację SDK.

Instrumentuj swoją aplikację, aby komunikowała się z emulatorami

Platformy Android, Apple i internetowe pakiety SDK

Skonfiguruj konfigurację w aplikacji lub zajęcia testowe w celu interakcji z bazą danych czasu rzeczywistego w następujący sposób.

Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val database = Firebase.database
database.useEmulator("10.0.2.2", 9000)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseDatabase database = FirebaseDatabase.getInstance();
database.useEmulator("10.0.2.2", 9000);
Szybki
    // In almost all cases the ns (namespace) is your project ID.
let db = Database.database(url:"http://127.0.0.1:9000?ns=YOUR_DATABASE_NAMESPACE")

Web modular API

import { getDatabase, connectDatabaseEmulator } from "firebase/database";

const db = getDatabase();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  connectDatabaseEmulator(db, "127.0.0.1", 9000);
} 

Web namespaced API

var db = firebase.database();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  db.useEmulator("127.0.0.1", 9000);
} 

Do testowania funkcji Cloud Functions uruchamianych przez zdarzenia z bazy danych czasu rzeczywistego przy użyciu emulatora nie jest wymagana żadna dodatkowa konfiguracja. Gdy działają emulatory Realtime Database i Cloud Functions, automatycznie współpracują.

Pakiety SDK administratora

Zestawy SDK Firebase Admin automatycznie łączą się z emulatorem bazy danych czasu rzeczywistego, gdy ustawiona jest zmienna środowiskowa FIREBASE_DATABASE_EMULATOR_HOST :

export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"

Jeśli Twój kod działa w emulatorze Cloud Functions, Twój identyfikator projektu i inna konfiguracja zostaną automatycznie ustawione podczas wywoływania initializeApp .

Jeśli chcesz, aby Twój kod Admin SDK łączył się ze współdzielonym emulatorem działającym w innym środowisku, musisz podać ten sam identyfikator projektu, który ustawiłeś za pomocą interfejsu CLI Firebase . Możesz przekazać identyfikator projektu do bezpośredniego initializeApp lub ustawić zmienną środowiskową GCLOUD_PROJECT .

Pakiet SDK administratora Node.js
admin.initializeApp({ projectId: "your-project-id" });
Zmienna środowiskowa
export GCLOUD_PROJECT="your-project-id"

Wyczyść bazę danych pomiędzy testami

Aby opróżnić bazę danych czasu rzeczywistego pomiędzy działaniami, możesz wyczyścić odniesienie do bazy danych. Możesz zastosować to podejście jako alternatywę dla zwykłego zamykania procesu emulatora.

Kotlin+KTX
// With a DatabaseReference, write null to clear the database.
database.reference.setValue(null)
Java
// With a DatabaseReference, write null to clear the database.
database.getReference().setValue(null);
Szybki
// With a DatabaseReference, write nil to clear the database.
    Database.database().reference().setValue(nil);

Web modular API

import { getDatabase, ref, set } from "firebase/database";

// With a database Reference, write null to clear the database.
const db = getDatabase();
set(ref(db), null);

Web namespaced API

// With a database Reference, write null to clear the database.
firebase.database().ref().set(null);

Naturalnie Twój kod powinien czekać na potwierdzenie, że opróżnianie zakończyło się lub nie powiodło się przy użyciu funkcji obsługi zdarzeń asynchronicznych na Twojej platformie.

Po wdrożeniu takiego kroku możesz sekwencjonować testy i uruchamiać funkcje, mając pewność, że stare dane zostaną usunięte między kolejnymi uruchomieniami i będziesz korzystać ze świeżej podstawowej konfiguracji testu.

Importuj i eksportuj dane

Baza danych i emulatory Cloud Storage for Firebase umożliwiają eksport danych z działającej instancji emulatora. Zdefiniuj bazowy zestaw danych do wykorzystania w testach jednostkowych lub przepływach pracy ciągłej integracji, a następnie wyeksportuj go w celu udostępnienia zespołowi.

firebase emulators:export ./dir

W testach przy uruchomieniu emulatora importuj dane bazowe.

firebase emulators:start --import=./dir

Możesz poinstruować emulator, aby eksportował dane po zamknięciu, określając ścieżkę eksportu lub po prostu używając ścieżki przekazanej do flagi --import .

firebase emulators:start --import=./dir --export-on-exit

Te opcje importu i eksportu danych działają również z poleceniem firebase emulators:exec . Więcej informacji można znaleźć w dokumentacji poleceń emulatora .

Wizualizuj aktywność reguł bezpieczeństwa

Podczas pracy nad pętlami prototypowymi i testowymi możesz korzystać z narzędzi do wizualizacji i raportów udostępnianych przez pakiet Local Emulator Suite.

Wizualizuj oceny reguł

Po dodaniu reguł zabezpieczeń do prototypu możesz je debugować za pomocą narzędzi pakietu Local Emulator Suite.

Po przeprowadzeniu zestawu testów możesz uzyskać dostęp do raportów zasięgu testów, które pokazują, jak została oceniona każda z Twoich reguł. Aby uzyskać raporty, wykonaj zapytanie do odsłoniętego punktu końcowego w emulatorze, gdy jest on uruchomiony. Aby uzyskać wersję przyjazną dla przeglądarki, użyj następującego adresu URL:

http://localhost:9000/.inspect/coverage?ns=<database_name>

Spowoduje to rozbicie reguł na wyrażenia i podwyrażenia, na które można najechać myszką, aby uzyskać więcej informacji, w tym liczbę wykonań i zwrócone wartości. Aby uzyskać surową wersję tych danych w formacie JSON, w zapytaniu umieść następujący adres URL:

http://localhost:9000/.inspect/coverage.json?ns=<database_name>

Co następne?