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

Zanim połączysz aplikację z emulatorem Realtime Database, upewnij się, że znasz ogólny Firebase Local Emulator Suiteprzepływ pracy oraz zainstalujesz i skonfigurujesz Local Emulator Suite i zapoznasz się z jego poleceniami CLI.

Wybieranie projektu Firebase

Firebase Local Emulator Suite emuluje usługi dla jednego projektu Firebase.

Aby wybrać projekt, którego chcesz używać, przed uruchomieniem emulatorów wpisz w CLI polecenie firebase use w 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 Funkcje Korzystanie z emulatorami
Real

Prawdziwy projekt Firebase to projekt, który został utworzony i skonfigurowany (najprawdopodobniej w Firebasekonsoli).

Prawdziwe projekty mają aktywne zasoby, takie jak instancje baz danych, zasobniki pamięci, funkcje lub inne zasoby skonfigurowane w tym projekcie Firebase.

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

W przypadku wszystkich usług, których nie emulujesz, Twoje aplikacje i kod będą wchodzić w interakcje z zasobem na żywo (instancją bazy danych, zasobnikiem pamięci, funkcją itp.).

Prezentacja

Projekt demonstracyjny Firebase nie ma prawdziwej konfiguracji Firebase ani aktywnych zasobów. Dostęp do tych projektów uzyskuje się zwykle za pomocą ćwiczeń z programowania lub innych samouczków.

Identyfikatory projektów demonstracyjnych mają prefiks demo-.

Podczas pracy z demonstracyjnymi projektami Firebase aplikacje i kod wchodzą w interakcje tylko z emulatorami. Jeśli aplikacja spróbuje wejść w interakcję z zasobem, dla którego nie działa emulator, kod nie zadziała.

Zalecamy korzystanie w miarę możliwości z projektów demonstracyjnych. W ten sposób możesz zapewnić im dostęp do tych korzyści:

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

Dostosuj aplikację, aby komunikowała się z emulatorami

Pakiety SDK na Androida, platformy Apple i pakiety SDK internetowe

Skonfiguruj ustawienia 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")

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 Cloud Functions wywoływane przez zdarzenia Bazy danych czasu rzeczywistego za pomocą emulatora, nie musisz niczego dodatkowo konfigurować. Gdy emulatory bazy danych czasu rzeczywistego i Cloud Functions działają jednocześnie, automatycznie ze sobą współpracują.

Admin SDK s

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

export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"

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

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

Pakiet 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 aktywnościami, możesz wyczyścić odwołanie do bazy danych. Możesz użyć tej metody zamiast po prostu zamykać proces 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 czekać na potwierdzenie, że opróżnianie zostało zakończone lub nie powiodło się, korzystając z asynchronicznych funkcji obsługi zdarzeń na platformie.

Po wykonaniu 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 testu podstawowego.

Importowanie i eksportowanie danych

Baza danych i emulatory 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 ciągłej integracji, a następnie wyeksportuj go, aby udostępnić go zespołowi.

firebase emulators:export ./dir

W testach podczas uruchamiania emulatora importuj dane podstawowe.

firebase emulators:start --import=./dir

Możesz polecić emulatorowi eksportowanie danych po wyłączeniu, 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 importu i eksportu danych działają również z poleceniem firebase emulators:exec. Więcej informacji znajdziesz w dokumentacji poleceń emulatora.

Wizualizacja aktywności reguł zabezpieczeń

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

Wizualizacja ocen reguł

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

Po przeprowadzeniu serii testów możesz uzyskać dostęp do raportów o pokryciu testami, które pokazują, jak oceniano poszczególne reguły. Aby uzyskać raporty, wyślij zapytanie do udostępnionego punktu końcowego na emulatorze podczas jego działania. Wersja przyjazna dla przeglądarki jest dostępna pod tym adresem URL:

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

Reguły są dzielone na wyrażenia i podwyrażenia, nad którymi możesz najechać kursorem, aby uzyskać więcej informacji, w tym liczbę wykonań i zwrócone wartości. Aby uzyskać wersję tych danych w formacie JSON, w zapytaniu podaj ten adres URL:

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

Co dalej?