Zanim zaczniesz korzystać z Firebase Local Emulator Suite, upewnij się, że masz utworzone projekt Firebase, skonfiguruj środowisko programistyczne i wybierz zainstalowane pakiety SDK Firebase dla Twojej platformy zgodnie z instrukcjami dla początkujących tematy Firebase dla Twojej platformy: Apple, Android lub internet.
Prototypowanie i testowanie
Local Emulator Suite zawiera kilka emulatorów produktów, zgodnie z opisem w tym artykule: Wprowadzenie do Firebase Local Emulator Suite. Możesz prototypować i testować za pomocą poszczególnych emulatorów oraz kombinacji emulatory, które według Ciebie odpowiadają usługom Firebase, których używasz. w produkcji.
Aby przedstawić przepływ pracy w usłudze Local Emulator Suite, załóżmy, że: pracujesz nad aplikacją, która korzysta z typowej kombinacji produktów: Firebase i funkcje w Cloud Functions aktywowane przez operacje na tej bazie danych.
Po lokalnym zainicjowaniu projektu Firebase cykl programowania za pomocą Local Emulator Suite zwykle składa się z 3 kroków:
Prototypowe funkcje są interaktywne dzięki emulatorom i Emulator Suite UI.
Jeśli używasz emulatora bazy danych lub emulatora Cloud Functions, wykonać jednorazowy krok, by połączyć aplikację z emulatorami.
Zautomatyzuj testy za pomocą emulatorów i niestandardowych skryptów.
Inicjowanie projektu Firebase lokalnie
Pamiętaj, aby zainstalować interfejs wiersza poleceń lub zaktualizować ją do najnowszej wersji.
curl -sL firebase.tools | bash
Zainicjuj bieżący katalog roboczy jako projektu Firebase, postępując zgodnie z instrukcjami na ekranie, aby określić, że korzystasz z usługi. Cloud Functions i Cloud Firestore lub Realtime Database:
firebase init
Katalog projektu będzie teraz zawierać pliki konfiguracji Firebase,
Plik definicji Firebase Security Rules dla bazy danych, katalog functions
który zawiera kod Cloud Functions i inne pliki pomocnicze.
Interaktywne prototypowanie
Local Emulator Suite umożliwia szybkie tworzenie prototypów nowych funkcji, a wbudowany w pakiet Analytics to jeden z najbardziej przydatnych prototypów narzędzi. Działa to trochę tak, jakby konsola Firebase działała lokalnie.
Za pomocą Emulator Suite UI można iterować projekt bazy danych, różne przepływy danych obejmujące funkcje w Cloud Functions, oceniać zmiany reguł zabezpieczeń sprawdzać logi, aby potwierdzić wydajność usług backendu itd. Następnie: aby zacząć od początku, wyczyść 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. modyfikowanie wpisów tekstowych w bazie danych oraz tworzenie i zapełnianie tej bazy danych w Emulator Suite UI, aby go aktywować.
- Utwórz funkcję w Cloud Functions aktywowaną przez zapisy w bazie danych, edytując
functions/index.js
w katalogu projektu. Zastąp w istniejącym pliku, używając poniższego fragmentu. Ta funkcja nasłuchuje zmian w węzłach w hierarchiimessages
, konwertuje zawartość właściwościoriginal
węzła na wielkimi literami, a wynik jest zapisany w nagłówkuuppercase
tego węzła. usłudze. - Uruchom Local Emulator Suite za pomocą
firebase emulators:start
Cloud Functions i baza danych po uruchomieniu są automatycznie skonfigurowane do współpracy. - Wyświetl interfejs w przeglądarce na stronie
http://localhost:4000
. Port 4000 jest domyślnym portem dla interfejsu użytkownika, ale sprawdź wyjście komunikatów terminala przez interfejsu wiersza poleceń Firebase. Zwróć uwagę na stan dostępnych emulatorów. W naszym przypadku uruchomione zostaną emulatory Cloud Functions i Realtime Database.
. . - W interfejsie na karcie Baza danych czasu rzeczywistego użyj zawartości bazy danych.
elementy sterujące edytora do tworzenia zbioru węzłów z węzłem
messages
zawierający węzełmessage1
, z kolei zawierający węzeł o ustawiono naoriginal
, a wartość ustawioną natest
. Ten uruchamia naszą funkcję w Cloud Functions. Zauważ, że noweuppercase
właściwość jest wyświetlana wkrótce z wartościąTEST
.
. - Sprawdź kartę Logi, aby sprawdzić, czy funkcja nie uruchomiła błędów inot podczas aktualizowania bazy danych.
const functions = require('firebase-functions/v1'); exports.makeUppercase = functions.database.ref('/messages/{pushId}/original') .onCreate((snapshot, context) => { const original = snapshot.val(); console.log('Uppercasing', context.params.pushId, original); const uppercase = original.toUpperCase(); return snapshot.ref.parent.child('uppercase').set(uppercase); });
Możesz łatwo powtarzać kod funkcji w Cloud Functions za pomocą funkcji interaktywnych zmian w bazie danych, aż do uzyskania odpowiedniego przepływu danych, bez naruszania kodu dostępu do bazy danych w aplikacji, ponowne kompilowanie i ponowne uruchamianie zestawów testowych.
Łączenie aplikacji z emulatorami
Jeśli wykonasz dobre postępy w tworzeniu interaktywnych prototypów i zdecydujesz się projektu, możesz dodać do swojej aplikacji kod dostępu do bazy danych za pomocą dla odpowiedniego pakietu SDK. W dalszym ciągu będziesz korzystać z karty Baza danych, a w przypadku funkcji Karta Dzienniki w Emulator Suite UI, aby potwierdzić działanie aplikacji jest poprawne.
Pamiętaj, że Local Emulator Suite jest narzędziem dla programistów lokalnych. Zapisy do produkcyjnych baz danych nie będą aktywować funkcji, które są prototypowane lokalnie.
Aby przejść na zapisywanie przez aplikację zapisów w bazie danych, potrzebujesz , aby wskazać zajęcia testowe lub konfigurację w aplikacji do emulatora Realtime Database.
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); }
Automatyzowanie testów za pomocą skryptów niestandardowych
A teraz ostatni krok ogólnego przepływu pracy. Po utworzeniu prototypu funkcji
i wygląda obiecująco na wszystkich platformach,
wdrażaniem i testowaniem. W przypadku testów jednostkowych i przepływów pracy CI możesz uruchomić
używać emulatorów do uruchamiania testów skryptów i wyłączania emulatorów w ramach pojedynczej rozmowy przy użyciu
polecenie exec
:
firebase emulators:exec "./testdir/test.sh"
Więcej informacji na temat poszczególnych emulatorów
Wiesz już, jak wygląda podstawowy przepływ pracy po stronie klienta. przejdź do szczegółów poszczególnych emulatorów w pakiecie Analytics, w tym aby używać ich 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?
Zapoznaj się z tematami związanymi z konkretnymi emulatorami, do których linki znajdziesz powyżej. Następnie:
- Wyselekcjonowany zestaw filmów i szczegółowe przykłady instrukcji znajdziesz na playliście szkoleniowej dotyczącej emulatorów Firebase.
- Badanie zaawansowanych przypadków użycia obejmujących testowanie reguł zabezpieczeń Pakiet SDK Firebase Test: Testowanie reguł zabezpieczeń (Cloud Firestore) , Testowanie reguł zabezpieczeń (Realtime Database) i Testowanie reguł zabezpieczeń (Cloud Storage for Firebase).