Zanim zaczniesz korzystać z usługi Firebase Local Emulator Suite, utwórz projekt w Firebase, skonfiguruj środowisko programistyczne oraz wybierz i zainstaluj pakiety SDK Firebase dla swojej platformy zgodnie z tematami Pierwsze kroki z Firebase dotyczącymi Twojej platformy: Apple, Android lub sieć.
Prototypowanie i testowanie
Local Emulator Suite zawiera kilka emulatorów usług, które opisano w artykule Wprowadzenie do Firebase Local Emulator Suite. Możesz tworzyć prototypy i testować je za pomocą poszczególnych emulatorów, a także ich kombinacji, w zależności od tego, których usług Firebase używasz w środowisku produkcyjnym.
Aby przedstawić proces Local Emulator Suite, załóżmy, że pracujesz nad aplikacją, która korzysta z typowego połączenia usług: bazy danych Firebase i funkcji w Cloud Functions wywoływanych przez operacje na tej bazie danych.
Po lokalnym zainicjowaniu projektu w Firebase cykl programowania z użyciem Local Emulator Suite będzie zwykle składał się z 3 etapów:
Interaktywnie twórz prototypy funkcji za pomocą emulatorów i Emulator Suite UI.
Jeśli używasz emulatora bazy danych lub emulatora Cloud Functions, wykonaj jednorazową czynność, aby połączyć aplikację z emulatorami.
Zautomatyzuj testy za pomocą emulatorów i niestandardowych skryptów.
Lokalne inicjowanie projektu w Firebase
Upewnij się, że masz zainstalowany interfejs wiersza poleceń lub zaktualizuj go do najnowszej wersji.
curl -sL firebase.tools | bashJeśli jeszcze nie masz zainicjowanego bieżącego katalogu roboczego jako projektu w Firebase, postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby określić, że używasz Cloud Functions i Cloud Firestore lub Realtime Database:
firebase initKatalog projektu będzie teraz zawierać pliki konfiguracyjne Firebase, plik definicji bazy danych Firebase Security Rules, katalog functions z kodem funkcji w Cloud Functions i inne pliki pomocnicze.
Interaktywne prototypowanie
Local Emulator Suite umożliwia szybkie prototypowanie nowych funkcji, a wbudowany interfejs użytkownika pakietu jest jednym z najbardziej przydatnych narzędzi do prototypowania. To trochę tak, jakby konsola Firebase działała lokalnie.
Za pomocą Emulator Suite UI możesz iterować projekt bazy danych, wypróbowywać różne przepływy danych obejmujące funkcje w Cloud Functions, oceniać zmiany reguł zabezpieczeń, sprawdzać logi, aby potwierdzić działanie usług backendu, i wykonywać inne czynności. Jeśli chcesz zacząć od nowa, po prostu wyczyść bazę danych i zacznij od nowa z nowym pomysłem na projekt.
Wszystko to jest dostępne, gdy uruchomisz Local Emulator Suite za pomocą:
firebase emulators:startAby utworzyć prototyp naszej hipotetycznej aplikacji, skonfigurujmy i przetestujmy podstawową funkcję w Cloud Functions, która będzie modyfikować wpisy tekstowe w bazie danych. Utworzymy też i wypełnimy tę bazę danych w Emulator Suite UI, aby uruchomić funkcję.
- Utwórz funkcję w Cloud Functions aktywowaną przez zapisy w bazie danych, edytując plik
functions/index.jsw katalogu projektu. Zastąp zawartość istniejącego pliku tym fragmentem kodu. Ta funkcja nasłuchuje zmian w dokumentach w kolekcjimessages, konwertuje zawartość polaoriginaldokumentu na wielkie litery i zapisuje wynik w poluuppercasetego dokumentu. - Uruchom Local Emulator Suite za pomocą
firebase emulators:start. Emulatory Cloud Functions i bazy danych uruchamiają się i są automatycznie konfigurowane do współdziałania. - Wyświetl interfejs w przeglądarce pod adresem
http://localhost:4000. Domyślny port interfejsu to 4000, ale sprawdź komunikaty terminala wygenerowane przez interfejs wiersza poleceń Firebase. Zwróć uwagę na stan dostępnych emulatorów. W naszym przypadku będą działać emulatory Cloud Functions i Cloud Firestore.
- W interfejsie na karcie Firestore > Dane kliknij Rozpocznij kolekcję i postępuj zgodnie z instrukcjami, aby utworzyć nowy dokument w kolekcji
messagesz nazwą polaoriginali wartościątest. Spowoduje to aktywowanie funkcji w Cloud Functions. Zauważ, że po chwili pojawi się nowe poleuppercasez wartością „TEST”.
- Na karcie Firestore > Żądania sprawdź żądania wysyłane do emulowanej bazy danych, w tym wszystkie oceny Firebase Security Rules przeprowadzone w ramach realizacji tych żądań.
- Sprawdź na karcie Logi, 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 przełączać się między kodem funkcji w Cloud Functions a interaktywnymi zmianami w bazie danych, aż uzyskasz odpowiedni przepływ danych, bez konieczności modyfikowania kodu dostępu do bazy danych w aplikacji, ponownej kompilacji i ponownego uruchamiania zestawów testów.
Łączenie aplikacji z emulatorami
Gdy osiągniesz zadowalające wyniki w interaktywnym prototypowaniu i ustalisz projekt, możesz dodać do aplikacji kod dostępu do bazy danych za pomocą odpowiedniego pakietu SDK. Nadal będziesz używać karty bazy danych, a w przypadku funkcji – karty Logi w Emulator Suite UI, aby potwierdzić, że aplikacja działa prawidłowo.
Pamiętaj, że Local Emulator Suite to lokalne narzędzie dla programistów. Zapisy w produkcyjnych bazach danych nie będą wywoływać funkcji, których prototypy tworzysz lokalnie.
Aby przełączyć się na zapisywanie danych w bazie danych przez aplikację, musisz wskazać emulator Cloud Firestore w klasach testowych lub konfiguracji w aplikacji.
Kotlin
// 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
Unity
FirebaseFirestore db = FirebaseFirestore.DefaultInstance; // Connects to the Firestore Emulator running on port 8080 db.Settings.Host = "127.0.0.1:8080"; db.Settings.SslEnabled = false;
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ą niestandardowych skryptów
Teraz czas na ostatni krok w całym procesie. Gdy stworzysz prototyp funkcji w aplikacji i będzie on wyglądał obiecująco na wszystkich platformach, możesz przejść do ostatecznego wdrożenia i testowania. W przypadku testów jednostkowych i procesów CI możesz uruchomić emulatory, przeprowadzić testy skryptowe i wyłączyć emulatory za pomocą jednego wywołania polecenia exec:
firebase emulators:exec "./testdir/test.sh"bardziej szczegółowe informacje o poszczególnych emulatorach,
Wiesz już, jak wygląda podstawowy proces po stronie klienta. Możesz teraz 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:
- Dodawanie emulatora Authentication do przepływów pracy związanych z prototypowaniem
- 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
- Ocena Firebase Extensions przy minimalizacji kosztów rozliczeniowych za pomocą emulatora Extensions
Co dalej?
Zapoznaj się z tematami dotyczącymi konkretnych emulatorów, do których linki znajdziesz powyżej. Następnie:
- Aby obejrzeć wybrane filmy i szczegółowe instrukcje, skorzystaj z playlisty szkoleniowej dotyczącej emulatorów Firebase.
- Zapoznaj się z zaawansowanymi przypadkami użycia obejmującymi testowanie reguł zabezpieczeń i pakiet Firebase Test SDK: Testowanie reguł zabezpieczeń (Cloud Firestore), Testowanie reguł zabezpieczeń (Realtime Database) i Testowanie reguł zabezpieczeń (Cloud Storage for Firebase).