Zanim połączysz aplikację z emulatorem Bazy danych czasu rzeczywistego, upewnij się, że znasz cały przepływ pracy w Pakiecie emulatorów lokalnych Firebase oraz że zainstalujesz i skonfigurujesz Pakiet emulatorów lokalnych, a także zapoznasz się z poleceniami interfejsu wiersza poleceń.
Wybierz projekt Firebase
Pakiet emulatorów lokalnych Firebase emuluje usługi związane z jednym projektem Firebase.
Aby wybrać projekt do użycia, przed uruchomieniem emulatorów uruchom interfejs wiersza poleceń firebase use
w katalogu roboczym. Możesz też przekazać flagę --project
do każdego polecenia emulatora.
Pakiet emulatorów lokalnych obsługuje emulację prawdziwych projektów Firebase i projektów prezentacyjnych.
Typ projektu | Funkcje | Używanie z emulatorami |
---|---|---|
Prawdziwe |
Prawdziwy projekt Firebase to projekt utworzony i skonfigurowany przez Ciebie (najprawdopodobniej w konsoli Firebase). Rzeczywiste projekty mają aktywne zasoby, takie jak instancje bazy danych, zasobniki na dane, funkcje lub inne zasoby skonfigurowane dla danego projektu Firebase. |
Podczas pracy z prawdziwymi projektami Firebase możesz uruchomić emulatory dowolnej lub wszystkich obsługiwanych usług. W przypadku usług, których nie emulujesz, aplikacje i kod będą wchodzić w interakcje z aktywnym zasobem (instancją bazy danych, zasobnikiem na dane, funkcją itp.). |
Demonstracyjny |
Projekt demonstracyjny Firebase nie ma rzeczywistej konfiguracji Firebase ani aktywnych zasobów. Dostęp do tych projektów uzyskuje się zwykle w ramach ćwiczeń z programowania lub innych samouczków. Identyfikatory projektów demonstracyjnych mają prefiks |
Jeśli pracujesz w projektach demonstracyjnych Firebase, Twoje aplikacje i kod wchodzą w interakcję 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. |
Zalecamy, aby w miarę możliwości korzystać 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 konieczności tworzenia projektu Firebase.
- Silniejsze bezpieczeństwo, ponieważ jeśli Twój kod przypadkowo wywoła zasoby nieemulowane (produkcyjne), nie ma szans na zmianę danych, ich wykorzystanie i płatności
- Lepsza obsługa offline, ponieważ nie musisz łączyć się z internetem, aby pobrać konfigurację pakietu SDK.
Dostosuj aplikację do emulatorów
Platformy Android, Apple i internetowe pakiety SDK
Aby korzystać z bazy danych czasu rzeczywistego, skonfiguruj konfigurację w aplikacji lub klasy testowe w podany niżej 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);
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 w Cloud Functions aktywowane przez zdarzenia Bazy danych czasu rzeczywistego za pomocą emulatora, nie jest wymagana dodatkowa konfiguracja. Gdy działają zarówno emulatory Bazy danych czasu rzeczywistego, jak i Cloud Functions, działają one automatycznie.
Pakiety Admin SDK
Pakiety Firebase Admin SDK automatycznie łączą się z emulatorem Bazy danych czasu rzeczywistego, gdy skonfigurowana 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 ramach emulatora Cloud Functions, identyfikator projektu i inne konfiguracje zostaną automatycznie ustawione przy wywołaniu funkcji initializeApp
.
Jeśli chcesz, by Twój kod pakietu Admin SDK łączył się ze współdzielonym emulatorem działającym w innym środowisku, musisz podać ten sam identyfikator projektu, który ustawiasz w interfejsie wiersza poleceń Firebase.
Możesz przekazać identyfikator projektu bezpośrednio do usługi 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"
Czyszczenie bazy danych między testami
Aby wyczyścić bazę danych czasu rzeczywistego między działaniami, możesz wyczyścić odniesienie do bazy danych. Możesz użyć tej metody jako alternatywy dla zamknięcia 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);
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);
Kod powinien oczywiście czekać na potwierdzenie zakończenia lub niepowodzenia czyszczenia przy użyciu funkcji asynchronicznego obsługi zdarzeń na platformie.
Po zaimplementowaniu takiego kroku możesz utworzyć sekwencję testów i aktywować funkcje, mając pewność, że stare dane zostaną trwale usunięte między uruchomieniami i będziesz korzystać z nowej konfiguracji podstawowej.
Importowanie i eksportowanie danych
Baza danych i emulatory Cloud Storage dla Firebase umożliwiają eksportowanie danych z działającej instancji emulatora. Zdefiniuj bazowy zbiór danych do wykorzystania w testach jednostkowych lub przepływach pracy w trybie ciągłej integracji, a następnie wyeksportuj je, aby udostępnić je członkom zespołu.
firebase emulators:export ./dir
Podczas uruchamiania emulatora zaimportuj dane podstawowe podczas testów.
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 przekazywanej do flagi --import
.
firebase emulators:start --import=./dir --export-on-exit
Te opcje importu i eksportowania danych również działają z poleceniem firebase emulators:exec
. Więcej informacji znajdziesz w dokumentacji poleceń emulatora.
Wizualizacja aktywności związanej z regułami zabezpieczeń
Opracując prototyp i pętle testowe, możesz korzystać z narzędzi do wizualizacji i raportów dostępnych w Pakiecie emulatorów lokalnych.
Wizualizacja ocen reguł
Dodając reguły zabezpieczeń do prototypu, możesz je debugować za pomocą narzędzi Pakietu emulatorów lokalnych.
Po przeprowadzeniu zestawu testów możesz uzyskać dostęp do raportów zasięgu testów, które pokazują, jak zostały określone reguły. Aby pobrać raporty, wyślij w emulatorze zapytanie dotyczące ujawnionego punktu końcowego. W wersji przeznaczonej do wyświetlania w przeglądarce użyj tego adresu URL:
http://localhost:9000/.inspect/coverage?ns=<database_name>
Spowoduje to podział reguł na wyrażenia i wyrażenia podrzędne, po których możesz najechać kursorem myszy, aby uzyskać więcej informacji, w tym liczbę wykonań i zwróconych wartości. W przypadku nieprzetworzonej wersji JSON tych danych uwzględnij w zapytaniu ten adres URL:
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
Co dalej?
- Wyselekcjonowany zestaw filmów i szczegółowe przykłady instrukcji znajdziesz na playliście szkoleniowej dotyczącej emulatorów Firebase.
- Zbadaj zaawansowane przypadki użycia obejmujące testowanie reguł zabezpieczeń i pakiet SDK Firebase Test SDK: testowanie reguł zabezpieczeń (baza danych czasu rzeczywistego).
- Ponieważ aktywowane funkcje to typowa integracja z Bazą danych czasu rzeczywistego, więcej informacji o emulatorze Cloud Functions dla Firebase znajdziesz w artykule Uruchamianie funkcji lokalnie.