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

Zanim połączysz aplikację z emulatorem Realtime Database, upewnij się, że rozumiesz ogólny przepływ pracy w Firebase Local Emulator Suite oraz że instalujesz i konfigurujesz Local Emulator Suite i sprawdzasz polecenia interfejsu wiersza poleceń.

Wybierz projekt w Firebase

Firebase Local Emulator Suite emuluje produkty w ramach jednego projektu w Firebase.

Aby wybrać projekt, którego chcesz użyć, przed uruchomieniem emulatorów uruchom w interfejsie wiersza poleceń polecenie firebase use w katalogu roboczym. Możesz też przekazać flagę --project do każdego polecenia emulatora.

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

Typ projektu Funkcje Używanie z emulatorami
real

Rzeczywisty projekt w Firebase to projekt utworzony i skonfigurowany przez Ciebie (najprawdopodobniej w konsoli Firebase).

Rzeczywiste projekty zawierają aktywne zasoby, takie jak instancje baz danych, zasobniki, funkcje lub inne zasoby skonfigurowane dla danego projektu Firebase.

Podczas pracy z prawdziwymi projektami w Firebase możesz uruchamiać emulatory dowolnych lub wszystkich obsługiwanych usług.

W przypadku usług, których nie emulujesz, aplikacje i kod będą wchodzić w interakcje z zasobami aktywnymi (instancją bazy danych, zasobnikiem na dane, funkcją itp.).

Prezentacja

Projekt demonstracyjny Firebase nie ma rzeczywistej konfiguracji Firebase ani aktywnych zasobów. Dostęp do tych projektów można zwykle uzyskać za pomocą ćwiczeń w programowaniu lub innych samouczków.

Identyfikatory projektów demonstracyjnych mają prefiks demo-.

Podczas pracy z projektami w Firebase w wersji demonstracyjnej aplikacje i kod wchodzą w interakcje wyłącznie z emulatorami. Jeśli aplikacja spróbuje wejść w interakcję z zasobem, dla którego emulator nie jest uruchomiony, kod nie zadziała.

Zalecamy korzystanie z projektów demonstracyjnych, gdy tylko jest to możliwe. W ten sposób możesz zapewnić im dostęp do tych korzyści:

  • łatwiejsza konfiguracja, ponieważ emulatory można uruchamiać bez tworzenia projektu w Firebase;
  • Większe bezpieczeństwo, ponieważ jeśli kod przypadkowo wywoła nieemulowane zasoby (produkcyjne), nie ma możliwości zmiany danych, użycia ani naliczenia opłat.
  • Lepsza obsługa offline, ponieważ nie trzeba mieć dostępu do internetu, aby pobrać konfigurację pakietu SDK.

Instrumentowanie aplikacji pod kątem komunikacji z emulatorami

Pakiety SDK na Androida, platformy Apple i sieć

Skonfiguruj konfigurację w aplikacji lub klasy testowe, aby wchodzić w interakcje z Realtime Database w ten sposób.

Kotlin
// 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);
Swift
    // 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")
Unity
// Connects to the RTDB Emulator running on port 9000.
// Note: You may need to append your namespace: "?ns=YOUR_PROJECT_ID"
FirebaseDatabase database = FirebaseDatabase.GetInstance("http://127.0.0.1:9000");

Web

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

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

Aby przetestować funkcje w Cloud Functions wywoływane przez zdarzenia Bazy danych czasu rzeczywistego za pomocą emulatora, nie musisz niczego konfigurować. Gdy emulatory Bazy danych czasu rzeczywistego i Cloud Functions są uruchomione, automatycznie współpracują ze sobą.

Admin SDK s

Firebase Admin SDK automatycznie łączą się z emulatorem Realtime Database, gdy zmienna środowiskowa FIREBASE_DATABASE_EMULATOR_HOST jest ustawiona:

export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"

Jeśli kod jest uruchamiany w emulatorze Cloud Functions, identyfikator projektu i inne ustawienia konfiguracji zostaną automatycznie ustawione podczas wywoływania initializeApp.

Jeśli chcesz, aby kod Admin SDK łączył się z emulatorem udostępnionym działającym w innym środowisku, musisz podać ten sam identyfikator projektu, który został ustawiony za pomocą interfejsu wiersza poleceń Firebase. Możesz przekazać identyfikator projektu bezpośrednio do initializeApp lub ustawić zmienną środowiskową GCLOUD_PROJECT.

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

Czyszczenie bazy danych między testami

Aby wyczyścić Realtime Database między działaniami, możesz wyczyścić odwołanie do bazy danych. Możesz użyć tego podejścia jako alternatywy dla zwykłego wyłączenia procesu emulatora.

Kotlin
// 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);
Swift
// With a DatabaseReference, write nil to clear the database.
    Database.database().reference().setValue(nil);

Web

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

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

Oczywiście kod powinien oczekiwać na potwierdzenie, że opróżnianie zostało zakończone lub nie powiodło się, korzystając z funkcji asynchronicznej obsługi zdarzeń na platformie.

Po wdrożeniu takiego kroku możesz sekwencjonować testy i wywoływać funkcje, mając pewność, że stare dane zostaną usunięte między uruchomieniami i że używasz nowej konfiguracji testowej.

Importowanie i eksportowanie danych

Emulatory bazy danych i Cloud Storage for Firebase umożliwiają eksportowanie danych z działającej instancji emulatora. Zdefiniuj podstawowy zestaw danych do użycia w testach jednostkowych lub przepływach pracy trybu 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 podstawowe.

firebase emulators:start --import=./dir

Możesz poinstruować emulator, aby eksportował dane podczas wyłączania, podają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 importowania i eksportowania danych działają też z poleceniem firebase emulators:exec. Więcej informacji znajdziesz w dokumentacji poleceń emulatora.

Wizualizacja aktywności związanej z regułami zabezpieczeń

Podczas pracy nad prototypem i testowania pętli możesz korzystać z narzędzi do wizualizacji i raportów udostępnianych przez Local Emulator Suite.

Wizualizacja ocen reguł

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

Po przeprowadzeniu zestawu testów możesz uzyskać dostęp do raportów o pokryciu testowym, które pokazują, jak oceniono każdą z reguł. Aby uzyskać raporty, wyślij zapytanie do udostępnionego punktu końcowego w emulatorze, gdy jest on uruchomiony. Aby uzyskać wersję przyjazną dla przeglądarki, użyj tego adresu URL:

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

Dzięki temu reguły są dzielone na wyrażenia i podwyrażenia, na które możesz najechać kursorem, aby uzyskać więcej informacji, w tym liczbę wykonań i zwrócone wartości. Aby uzyskać nieprzetworzoną wersję JSON tych danych, dodaj do zapytania ten adres URL:

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

Co dalej?