Zanim zaczniesz korzystać z Firebase Local Emulator Suite, musisz utworzyć projekt Firebase, skonfigurować środowisko programistyczne oraz wybrać i zainstalować pakiety SDK Firebase na swojej platformie zgodnie z tematami Rozpoczęcie korzystania z Firebase na Twojej platformie: Apple, Android lub Internet.
Prototypowanie i testowanie
Local Emulator Suite zawiera kilka emulacji produktów, jak opisano w Wprowadzeniu do Firebase Local Emulator Suite. Możesz prototypować i testować za pomocą poszczególnych emulatorów oraz ich kombinacji, zależnie od tego, których usług Firebase używasz w środowisku produkcyjnym.
Aby w tym temacie przedstawić proces Local Emulator Suite, załóżmy, że pracujesz nad aplikacją, która korzysta z typowej kombinacji usług: bazy danych Firebase i funkcji Cloud Functions wywoływanych przez operacje wykonywane w tej bazie danych.
Po zainicjowaniu lokalnie projektu Firebase cykl programowania z użyciem Local Emulator Suite składa się zwykle z 3 etapów:
Twórz prototypy funkcji w interakcji z emulatorami i Emulator Suite UI.
Jeśli używasz emulatora bazy danych lub emulatora Cloud Functions, wykonaj jednorazowy krok, aby połączyć aplikację z emulatorami.
Automatyzuj testy za pomocą emulatorów i skryptów niestandardowych.
Inicjowanie projektu Firebase lokalnie
Pamiętaj, aby zainstalować interfejs wiersza poleceń lub zaktualizować go do najnowszej wersji.
curl -sL firebase.tools | bash
Jeśli nie zostało to jeszcze zrobione, zainicjuj bieżący katalog roboczy jako projekt Firebase, wykonując instrukcje wyświetlane na ekranie, aby określić, że korzystasz z Cloud Functions i Cloud Firestore lub Realtime Database:
firebase init
Katalog projektu będzie teraz zawierać pliki konfiguracji Firebase, plik definicji bazy danych Firebase Security Rules, katalog functions
z kodem funkcji w chmurze oraz inne pliki pomocnicze.
Interaktywne prototypowanie
Local Emulator Suite umożliwia szybkie tworzenie prototypów nowych funkcji, a wbudowany interfejs użytkownika G Suite jest jednym z najprzydatniejszych narzędzi do prototypowania. To trochę tak, jakby konsola Firebase działała lokalnie.
Za pomocą Emulator Suite UI można m.in. powtarzać projekt bazy danych, testować różne przepływy danych związane z funkcjami w chmurze, oceniać zmiany reguł zabezpieczeń i sprawdzać logi w celu potwierdzenia wydajności usług backendu. Jeśli chcesz zacząć od nowa, po prostu opróżnij bazę danych i zacznij od nowa z nowym pomysłem na projekt.
Wszystkie te funkcje są dostępne po uruchomieniu Local Emulator Suite z:
firebase emulators:start
Aby stworzyć prototyp naszej hipotetycznej aplikacji, skonfigurujmy i przetestujmy podstawową funkcję w Cloud Functions do modyfikowania wpisów tekstowych w bazie danych, a potem utworzymy i zapełnimy tę bazę danych w Emulator Suite UI, aby ją aktywować.
- Utwórz funkcję w Cloud Functions aktywowaną przez zapisy w bazie danych, edytując plik
functions/index.js
w katalogu projektu. Zastąp zawartość istniejącego pliku tym fragmentem kodu. Ta funkcja nasłuchuje zmian w dokumentach w kolekcjimessages
, konwertuje zawartość polaoriginal
dokumentu na wielkie litery i zapisuje wynik w poluuppercase
tego dokumentu. - Uruchom Local Emulator Suite za pomocą
firebase emulators:start
. Emulatory Cloud Functions i bazy danych uruchamiają się automatycznie skonfigurowane do współpracy. - Wyświetl interfejs w przeglądarce na stronie
http://localhost:4000
. Port 4000 jest domyślnym portem interfejsu użytkownika, ale sprawdź komunikaty terminala generowane przez interfejs wiersza poleceń Firebase. Zwróć uwagę na stan dostępnych emulatorów. W naszym przypadku uruchomione będą emulatory Cloud Functions i Cloud Firestore.
- W interfejsie na karcie Firestore > Dane kliknij Rozpocznij zbieranie i postępuj zgodnie z wyświetlanymi instrukcjami, aby utworzyć nowy dokument w kolekcji
messages
z nazwą polaoriginal
i wartościątest
. Spowoduje to aktywowanie funkcji w Cloud Functions. Wkrótce pojawi się nowe poleuppercase
z ciągiem znaków „TEST”.
- Na karcie Firestore > Żądania sprawdź żądania wysłane do emulowanej bazy danych, w tym wszystkie oceny Firebase Security Rules wykonane w ramach realizacji tych żądań.
- Na karcie Dzienniki sprawdź, czy podczas aktualizowania bazy danych nie wystąpiły błędy.
const functions = require('firebase-functions/v1'); exports.makeUppercase = functions.firestore.document('/messages/{documentId}') .onCreate((snap, context) => { const original = snap.data().original; console.log('Uppercasing', context.params.documentId, original); const uppercase = original.toUpperCase(); return snap.ref.set({uppercase}, {merge: true}); });
Możesz łatwo powtarzać kod funkcji w Cloud Functions i interaktywne zmiany w bazie danych aż do uzyskania odpowiedniego przepływu danych bez dotykania kodu dostępu do bazy danych w aplikacji, ponownego kompilowania i ponownego uruchamiania zestawów testowych.
Połącz aplikację z emulatorami
Gdy wykonasz już większość prac związanych z tworzeniem interaktywnych prototypów i wybierzesz odpowiedni projekt, możesz dodać do aplikacji kod dostępu do bazy danych za pomocą odpowiedniego pakietu SDK. Nadal będziesz korzystać z karty bazy danych oraz (w przypadku funkcji) karty Logi w Emulator Suite UI, aby sprawdzać, czy aplikacja działa prawidłowo.
Pamiętaj, że Local Emulator Suite jest narzędziem dla programistów lokalnych. Zapisy do baz danych produkcyjnych nie będą uruchamiać funkcji, których prototypy tworzysz lokalnie.
Aby przełączyć się na zapisywanie danych w aplikacji w bazie danych, musisz skierować klasy testowe lub konfigurację w aplikacji na Cloud Firestoreemulator.
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 firestore = Firebase.firestore firestore.useEmulator("10.0.2.2", 8080) firestore.firestoreSettings = firestoreSettings { isPersistenceEnabled = false }
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFirestore firestore = FirebaseFirestore.getInstance(); firestore.useEmulator("10.0.2.2", 8080); FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder() .setPersistenceEnabled(false) .build(); firestore.setFirestoreSettings(settings);
Swift
let settings = Firestore.firestore().settings settings.host = "127.0.0.1:8080" settings.cacheSettings = MemoryCacheSettings() settings.isSSLEnabled = false Firestore.firestore().settings = settings
Web
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore"; // firebaseApps previously initialized using initializeApp() const db = getFirestore(); connectFirestoreEmulator(db, '127.0.0.1', 8080);
Web
// Firebase previously initialized using firebase.initializeApp(). var db = firebase.firestore(); if (location.hostname === "localhost") { db.useEmulator("127.0.0.1", 8080); }
Automatyzowanie testów za pomocą skryptów niestandardowych
Oto ostatni ogólny krok przepływu pracy. Gdy prototyp funkcji w aplikacji będzie wyglądał obiecująco na wszystkich platformach, możesz przejść do ostatecznej implementacji i testowania. W przypadku testowania jednostkowego i przepływów pracy CI możesz uruchamiać emulatory, uruchamiać testy skryptowe i wyłączać emulatory w pojedynczym wywołaniu za pomocą polecenia exec
:
firebase emulators:exec "./testdir/test.sh"
Więcej informacji na temat poszczególnych emulatorów
Teraz, gdy już wiesz, jak wygląda podstawowy proces po stronie klienta, możesz zapoznać się ze szczegółami dotyczącymi poszczególnych emulatorów w pakiecie, w tym z informacjami o tym, jak ich używać do tworzenia aplikacji po stronie serwera:
- Dodaj emulator Authentication do przepływów pracy tworzenia prototypów
- Więcej informacji o funkcjach emulatora Realtime Database
- Więcej informacji o funkcjach emulatora Cloud Storage for Firebase
- Więcej informacji o funkcjach emulatora Cloud Firestore
- Łączenie aplikacji z emulatorem Cloud Functions
- Oceń działanie Firebase Extensions i minimalizuj koszty dzięki emulatorowi Extensions
Co dalej?
Przeczytaj tematy dotyczące konkretnych emulatorów, do których linki znajdują się powyżej. Następnie:
- Aby uzyskać dostęp do wyselekcjonowanych filmów i szczegółowych przykładów, skorzystaj z playlisty szkoleń na temat emulatorów Firebase.
- Badaj zaawansowane przypadki użycia obejmujące testowanie reguł zabezpieczeń i pakiet SDK Firebase Test SDK: testuj reguły zabezpieczeń (Cloud Firestore), testuj reguły zabezpieczeń (Realtime Database) i testuj reguły zabezpieczeń (Cloud Storage for Firebase).