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 | 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?
- Aby zapoznać się z wyselekcjonowanym zestawem filmów i szczegółowymi przykładami instruktażowymi, zapoznaj się z playlistą szkoleniową dotyczącą emulatorów Firebase .
- Zbadaj zaawansowane przypadki użycia obejmujące testowanie reguł bezpieczeństwa i zestaw SDK testu Firebase: Testuj reguły bezpieczeństwa (baza danych w czasie rzeczywistym) .
- Ponieważ wyzwalane funkcje są typową integracją z bazą danych Realtime Database, dowiedz się więcej o emulatorze Cloud Functions for Firebase w artykule Uruchom funkcje lokalnie .