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ą | 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?
- Aby zapoznać się z wyselekcjonowanym zestawem filmów i szczegółowymi przykładami instrukcji, skorzystaj z playlisty szkoleniowej na temat 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 dla Firebase w sekcji Uruchom funkcje lokalnie .