Przed połączeniem aplikacji z emulatorem bazy danych czasu rzeczywistego upewnij się, że rozumiesz ogólny przepływ pracy w pakiecie lokalnych emulatorów Firebase oraz że instalujesz i konfigurujesz pakiet lokalnych emulatorów i przeglądasz jego polecenia CLI .
Wybierz projekt Firebase
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. Lub możesz 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 wszelkie inne zasoby skonfigurowane dla tego projektu Firebase. | Pracując z prawdziwymi projektami Firebase, możesz uruchamiać emulatory dla dowolnego lub wszystkich obsługiwanych produktów. W przypadku produktów, których nie emulujesz, Twoje aplikacje i kod będą wchodzić w interakcje z aktywnym zasobem (instancja bazy danych, zasobnik pamięci, funkcja itp.). |
Próbny | Demonstracyjny projekt Firebase nie ma rzeczywistej konfiguracji Firebase ani aktywnych zasobów. Projekty te są zwykle dostępne za pośrednictwem laboratoriów kodów lub innych samouczków. Identyfikatory projektów dla projektów demonstracyjnych mają przedrostek | Podczas pracy z demonstracyjnymi projektami Firebase Twoje aplikacje i kod współdziałają tylko z emulatorami . Jeśli Twoja aplikacja spróbuje wejść w interakcję z zasobem, dla którego nie działa emulator, 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 rozliczenie
- Lepsze wsparcie offline, ponieważ nie ma potrzeby dostępu do Internetu, aby pobrać konfigurację SDK.
Przygotuj swoją aplikację do komunikowania się z emulatorami
Platformy Android, Apple i Web SDK
Skonfiguruj konfigurację w aplikacji lub klasy testowe do 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://localhost: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, "localhost", 9000); }
Web namespaced API
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 uruchamianych przez zdarzenia bazy danych czasu rzeczywistego za pomocą emulatora nie jest wymagana żadna dodatkowa konfiguracja. Kiedy oba emulatory Baza danych czasu rzeczywistego i Cloud Functions są uruchomione, 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, Twój identyfikator projektu i inna konfiguracja zostaną automatycznie ustawione podczas wywołania initalizeApp
.
Jeśli chcesz, aby Twój kod Admin SDK łączył się z udostępnionym emulatorem działającym w innym środowisku, musisz podać ten sam identyfikator projektu, który ustawiłeś za pomocą Firebase CLI . Możesz przekazać identyfikator projektu bezpośrednio do 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 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);
Oczywiście Twój kod powinien czekać na potwierdzenie, że opróżnianie zakończyło się lub nie powiodło się, korzystając z funkcji obsługi zdarzeń asynchronicznych Twojej platformy.
Po zaimplementowaniu takiego kroku możesz sekwencjonować testy i uruchamiać swoje funkcje, mając pewność, że stare dane zostaną wyczyszczone między uruchomieniami i używasz nowej konfiguracji testu linii bazowej.
Importuj i eksportuj dane
Baza danych i emulatory Cloud Storage for Firebase umożliwiają eksportowanie danych z działającej instancji emulatora. Zdefiniuj podstawowy zestaw danych do wykorzystania 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 podczas zamykania, 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
. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją poleceń emulatora .
Wizualizuj działanie zasad bezpieczeństwa
Pracując nad pętlami prototypowymi i testowymi, możesz korzystać z narzędzi do wizualizacji i raportów dostarczanych przez pakiet Local Emulator Suite.
Wizualizuj oceny reguł
Dodając reguły bezpieczeństwa do swojego 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 pokrycia testów, które pokazują, jak oceniono każdą z reguł. Aby uzyskać raporty, wyślij zapytanie do uwidocznionego 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 wyrażenia podrzędne, na które możesz najechać kursorem myszy, aby uzyskać więcej informacji, w tym liczbę wykonań i zwrócone wartości. Aby uzyskać nieprzetworzoną wersję 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?
- Aby zapoznać się z wyselekcjonowanym zestawem filmów i szczegółowymi przykładami, postępuj zgodnie z listą odtwarzania szkoleniowych emulatorów Firebase .
- Zbadaj zaawansowane przypadki użycia obejmujące testowanie reguł bezpieczeństwa i pakiet Firebase Test SDK: Testuj reguły bezpieczeństwa (baza danych czasu rzeczywistego) .
- Ponieważ wyzwalane funkcje są typową integracją z bazą danych czasu rzeczywistego, dowiedz się więcej o emulatorze Cloud Functions for Firebase na stronie Uruchom funkcje lokalnie .