Prima di iniziare a utilizzare Firebase Local Emulator Suite, assicurati di aver creato un progetto Firebase, di aver configurato il tuo ambiente di sviluppo e di aver selezionato e installato gli SDK Firebase per la tua piattaforma in base agli argomenti Iniziare a utilizzare Firebase per la tua piattaforma: Apple, Android o web.
Prototipazione e test
Local Emulator Suite contiene diversi emulatori di prodotti, come descritto in Introduzione a Firebase Local Emulator Suite. Puoi prototipare e testare con singoli emulatori o combinazioni di emulatori, come preferisci, in base ai prodotti Firebase che stai utilizzando in produzione.
Per questo argomento, per introdurre il flusso di lavoro Local Emulator Suite, supponiamo di lavorare a un'app che utilizza una combinazione tipica di prodotti: un database Firebase e funzioni cloud attivate da operazioni su quel database.
Dopo aver inizializzato localmente il progetto Firebase, il ciclo di sviluppo che utilizza Local Emulator Suite prevede in genere tre passaggi:
Crea un prototipo delle funzionalità in modo interattivo con gli emulatori e Emulator Suite UI.
Se utilizzi un emulatore di database o Cloud Functions, esegui un passaggio una tantum per connettere la tua app agli emulatori.
Automatizza i test con gli emulatori e gli script personalizzati.
Inizializzare un progetto Firebase localmente
Assicurati di installare l'interfaccia a riga di comando o eseguire l'aggiornamento all'ultima versione.
curl -sL firebase.tools | bash
Se non l'hai ancora fatto, inizializza la directory di lavoro corrente come progetto Firebase, seguendo le istruzioni sullo schermo per specificare che utilizzi Cloud Functions e Cloud Firestore o Realtime Database:
firebase init
La directory del progetto ora conterrà i file di configurazione Firebase, un file di definizione Firebase Security Rules per il database, una directory functions
contenente codice Cloud Functions e altri file di supporto.
Prototipazione interattiva
Local Emulator Suite è stato progettato per consentirti di prototipare rapidamente nuove funzionalità e l'interfaccia utente integrata della Suite è uno dei suoi strumenti di prototipazione più utili. È un po' come avere la console Firebase in esecuzione in locale.
Con Emulator Suite UI, puoi eseguire l'iterazione del design di un database, provare diversi flussi di dati che coinvolgono le funzioni cloud, valutare le modifiche alle regole di sicurezza, controllare i log per verificare il rendimento dei servizi di backend e altro ancora. Se vuoi ricominciare da capo, cancella il database e ricomincia con una nuova idea di progettazione.
È tutto disponibile quando avvii Local Emulator Suite con:
firebase emulators:start
Per prototipare la nostra app ipotetica, configuriamo e testiamo una funzione Cloud Functions di base per modificare le voci di testo in un database e creare e popolare il database in Emulator Suite UI per attivarlo.
- Crea una funzione cloud attivata dalle scritture del database modificando il
functions/index.js
file nella directory del progetto. Sostituisci i contenuti del file esistente con lo snippet seguente. Questa funzione rileva le modifiche ai documenti nella raccoltamessages
, converte i contenuti del campooriginal
di un documento in lettere maiuscole e archivia il risultato nel campouppercase
di quel documento. - Avvia Local Emulator Suite con
firebase emulators:start
. Si avviano gli emulatori Cloud Functions e di database, configurati automaticamente per interoperare. - Visualizza l'UI nel tuo browser all'indirizzo
http://localhost:4000
. La porta 4000 è quella predefinita per l'interfaccia utente, ma controlla i messaggi del terminale visualizzati dall'interfaccia a riga di comando Firebase. Controlla lo stato degli emulatori disponibili. Nel nostro caso, gli emulatori Cloud Functions e Cloud Firestore saranno in esecuzione.
- Nell'interfaccia utente, nella scheda Firestore > Dati, fai clic su
Avvia raccolta e segui le istruzioni per creare un nuovo documento in una
messages
raccolta, con il nome del campooriginal
e il valoretest
. Questo attiva la nostra funzione cloud. Osserva che a breve viene visualizzato un nuovo campouppercase
, compilato con la stringa "TEST".
- Nella scheda Firestore > Richieste, esamina le richieste effettuate al database simulato, incluse tutte le valutazioni Firebase Security Rules eseguite nell'ambito dell'evasione di queste richieste.
- Controlla la scheda Log per verificare che la funzione non abbia generato errori durante l'aggiornamento del database.
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}); });
Puoi passare facilmente dal codice della funzione cloud alle modifiche interattive del database finché non ottieni il flusso di dati che cerchi, senza toccare il codice di accesso al database in-app, ricompilare e riavviare le suite di test.
Collega l'app agli emulatori
Dopo aver fatto ottimi progressi con la prototipazione interattiva e aver scelto una progettazione, potrai aggiungere il codice di accesso al database alla tua app utilizzando l'SDK appropriato. Continuerai a utilizzare la scheda del database e, per le funzioni, la scheda Log in Emulator Suite UI per verificare che il comportamento dell'app sia corretto.
Ricorda che Local Emulator Suite è uno strumento di sviluppo locale. Le scritture nei database di produzione non attivano le funzioni che stai prototipando localmente.
Per fare in modo che l'app effettui scritture nel database, devi indirizzare le classi di test o la configurazione in-app all'emulatore Cloud Firestore.
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); }
Automatizza i test con script personalizzati
Ora è il momento dell'ultimo passaggio del flusso di lavoro complessivo. Una volta creato il prototipo della funzionalità in-app e se sembra promettente su tutte le piattaforme, puoi passare all'implementazione e ai test finali. Per i flussi di lavoro di test delle unità e CI, puoi avviare gli emulatori, eseguire test basati su script e arrestare gli emulatori in una singola chiamata con il comando exec
:
firebase emulators:exec "./testdir/test.sh"
Esplora i singoli emulatori in modo più approfondito
Ora che hai visto l'aspetto del flusso di lavoro di base lato client, puoi continuare con i dettagli sui singoli emulatori della suite, incluso come utilizzarli per lo sviluppo di app lato server:
- Aggiungere l'emulatore Authentication ai flussi di lavoro di prototipazione
- Scopri di più sulle funzionalità dell'emulatore Realtime Database
- Scopri di più sulle funzionalità dell'emulatore Cloud Storage for Firebase
- Scopri di più sulle funzionalità dell'emulatore Cloud Firestore
- Collegare l'app all'emulatore Cloud Functions
- Valuta Firebase Extensions riducendo al minimo i costi di fatturazione con l'emulatore Extensions
Che cosa succede ora?
Assicurati di leggere gli argomenti relativi agli emulatori specifici indicati ai link sopra. Quindi:
- Per una raccolta selezionata di video ed esempi pratici dettagliati, consulta la playlist di formazione su Firebase Emulators.
- Esamina casi d'uso avanzati che coinvolgono i test delle regole di sicurezza e l'SDK Firebase Test: Test Security Rules (Cloud Firestore), Test Security Rules (Realtime Database) e Test Security Rules (Cloud Storage for Firebase).