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

Zanim połączysz swoją aplikację z emulatorem Bazy danych czasu rzeczywistego, upewnij się, że rozumiesz cały przepływ pracy w pakiecie Firebase Local Emulator Suite oraz że instalujesz i konfigurujesz Local Emulator Suite oraz zapoznaj się z jego poleceniami CLI .

Wybierz projekt Firebase

Pakiet emulatorów lokalnych Firebase emuluje produkty dla jednego projektu Firebase.

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

Local Emulator Suite obsługuje emulację rzeczywistych 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 bazy 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 jakichkolwiek 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 rzeczywistej 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 dla projektów demonstracyjnych mają demo- demo.

Podczas pracy z projektami demonstracyjnymi Firebase Twoje aplikacje i kod współdziałają tylko z emulatorami . Jeśli aplikacja spróbuje wejść w interakcję z zasobem, dla którego emulator nie jest uruchomiony, ten kod zakończy się niepowodzeniem.

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

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

Instrumentacja aplikacji, aby rozmawiać z emulatorami

Platformy Android, Apple i internetowe pakiety SDK

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

Android
        // 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://localhost:9000?ns=YOUR_DATABASE_NAMESPACE")

Web version 9

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

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

Web version 8

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

Do testowania funkcji Cloud Functions wywoływanych przez zdarzenia Realtime Database za pomocą emulatora nie jest wymagana żadna dodatkowa konfiguracja. Gdy uruchomione są emulatory Bazy danych czasu rzeczywistego i Cloud Functions, automatycznie współpracują ze sobą.

Pakiety SDK administratora

Pakiety 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="localhost:9000"

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

Jeśli chcesz, aby kod pakietu Admin SDK łączył się z udostępnionym emulatorem działającym w innym środowisku, musisz podać ten sam identyfikator projektu, który został ustawiony za pomocą interfejsu wiersza polecenia Firebase . Możesz przekazać identyfikator projektu, aby bezpośrednio 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 między testami

Aby opróżnić bazę danych czasu rzeczywistego między działaniami, można wyczyścić odwołanie do bazy danych. Możesz użyć tego podejścia jako alternatywy dla zwykłego zamknięcia procesu emulatora.

Android
// 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 version 9

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 version 8

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

Oczywiście Twój kod powinien poczekać na potwierdzenie, że opróżnianie zakończyło się lub nie powiodło się przy użyciu funkcji obsługi zdarzeń asynchronicznych platformy.

Po zaimplementowaniu takiego kroku możesz sekwencjonować testy i uruchamiać funkcje, mając pewność, że stare dane zostaną usunięte między uruchomieniami i używasz nowej konfiguracji testu bazowego.

Importuj i eksportuj dane

Emulatory bazy danych i Cloud Storage umożliwiają eksportowanie danych z działającej instancji emulatora. Zdefiniuj podstawowy zestaw danych do użycia w testach jednostkowych lub przepływach pracy ciągłej integracji, a następnie wyeksportuj go, aby udostępnić go zespołowi.

firebase emulators:export ./dir

W testach podczas uruchamiania emulatora zaimportuj dane linii bazowej.

firebase emulators:start --import=./dir

Możesz poinstruować emulator, aby wyeksportował 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 opisie poleceń emulatora .

Wizualizuj aktywność reguł bezpieczeństwa

Podczas pracy z pętlami prototypowymi i testowymi możesz korzystać z narzędzi wizualizacyjnych i raportów dostarczanych przez Local Emulator Suite.

Wizualizuj oceny reguł

Gdy dodasz reguły bezpieczeństwa do swojego prototypu, możesz je debugować za pomocą narzędzi Local Emulator Suite.

Po uruchomieniu zestawu testów możesz uzyskać dostęp do raportów dotyczących pokrycia testami, które pokazują, jak oceniano każdą 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ć kursorem myszy, aby uzyskać więcej informacji, w tym liczbę wykonań i zwracanych wartości. W przypadku nieprzetworzonej wersji tych danych w formacie JSON w zapytaniu uwzględnij następujący adres URL:

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

Co następne?