Antes de conectar tu app al emulador de Realtime Database, asegúrate de comprender el flujo de trabajo general de Firebase Local Emulator Suite y de instalar y configurar Local Emulator Suite y revisar los comandos de su CLI.
Elige un proyecto de Firebase
Firebase Local Emulator Suite emula los productos para un solo proyecto de Firebase.
Para seleccionar el proyecto que quieres usar, ejecuta
firebase use
en la CLI en tu directorio de trabajo antes de iniciar los emuladores. También puedes pasar la
marca --project
a cada comando del
emulador.
Local Emulator Suite admite la emulación de proyectos reales y de demostración en Firebase.
Tipo de proyecto | Características | Uso con emuladores |
---|---|---|
Real |
Los proyectos de Firebase reales son aquellos que creaste y configuraste (probablemente mediante Firebase console). Los proyectos reales tienen recursos activos, como instancias de bases de datos, buckets de almacenamiento, funciones o cualquier otro recurso que hayas configurado para ese proyecto de Firebase. |
Cuando trabajas con proyectos reales de Firebase, puedes ejecutar emuladores para cualquiera de los productos compatibles o todos ellos. Si se trata de un producto que no estás emulando, tus apps y código interactuarán con los recursos activos (instancias de bases de datos, bucket de almacenamiento, función, etcétera). |
Demostración |
Los proyectos de demostración de Firebase no tienen una configuración real de Firebase ni recursos activos. Por lo general, se accede a estos proyectos mediante codelabs o algún otro instructivo. Los IDs de los proyectos de demostración tienen el prefijo |
Cuando trabajas con proyectos de demostración de Firebase, tus apps y código interactúan solo con emuladores. Si tu app intenta interactuar con un recurso para el cual no se está ejecutando un emulador, ese código fallará. |
Te recomendamos que uses proyectos de demostración siempre que sea posible. Estos son algunos de los beneficios:
- Configuración más sencilla, ya que puedes ejecutar los emuladores sin crear un proyecto de Firebase
- Mayor seguridad, ya que, si tu código invoca de forma accidental recursos no emulados (de producción), no hay posibilidad de que se modifiquen los datos, el uso ni la facturación
- Mejor soporte sin conexión, ya que no es necesario acceder a Internet para descargar la configuración del SDK
Instrumenta la app para que se comunique con los emuladores
SDK para plataformas de Android y Apple, y la Web
Configura la app o las clases de prueba para interactuar con Realtime Database de la siguiente manera:
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")
API modular 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); }
API con espacio de nombres web
var db = firebase.database(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. db.useEmulator("127.0.0.1", 9000); }
No se necesita ninguna configuración adicional para probar las Cloud Functions que se activan con eventos de Realtime Database en el emulador. Cuando los emuladores de Realtime Database y Cloud Functions están en ejecución, funcionan automáticamente en conjunto.
SDKs de Admin
Los SDKs de Firebase Admin se conectan automáticamente al emulador de Realtime Database cuando se configura
la variable de entorno FIREBASE_DATABASE_EMULATOR_HOST
de la siguiente manera:
export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"
Si tu código se ejecuta en el emulador de Cloud Functions, se establecerán automáticamente el ID del proyecto
y otros parámetros de configuración cuando llames a initializeApp
.
Si quieres que el código del SDK de Admin se conecte a un emulador compartido que se ejecute en
otro entorno, deberás especificar el mismo ID del proyecto que configuraste con Firebase CLI.
Podrás pasar el ID del proyecto directamente a initializeApp
o configurar la
variable de entorno GCLOUD_PROJECT
.
SDK de Admin para Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variable de entorno
export GCLOUD_PROJECT="your-project-id"
Borra la base de datos entre pruebas
Si quieres vaciar Realtime Database entre actividades, puedes borrar la referencia de la base de datos. Este enfoque sirve como alternativa al cierre del proceso del emulador.
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);
API modular 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);
API con espacio de nombres web
// With a database Reference, write null to clear the database. firebase.database().ref().set(null);
Normalmente, tu código debe esperar la confirmación de que la limpieza se completó correctamente o que esta falló mediante las funciones de control de eventos asíncronos de tu plataforma.
Después de implementar un paso como este, puedes secuenciar tus pruebas y activar tus funciones con la certeza de que se borrarán definitivamente los datos antiguos entre ejecuciones y que usarás una configuración de prueba de referencia nueva.
Importa y exporta datos
Los emuladores de base de datos y Cloud Storage para Firebase te permiten exportar datos desde una instancia de emulador en ejecución. Define un conjunto de datos de referencia para usarlo en tus pruebas de unidades o flujos de trabajo de integración continua y, luego, expórtalo para compartirlo con el equipo.
firebase emulators:export ./dir
Durante el inicio del emulador en las pruebas, importa los datos de referencia.
firebase emulators:start --import=./dir
Puedes indicarle al emulador que exporte datos durante el cierre, ya sea especificando una
ruta de exportación o simplemente usando la ruta de acceso que se pasó a la marca
--import
.
firebase emulators:start --import=./dir --export-on-exit
Estas opciones de importación y exportación de datos también funcionan con el comando firebase emulators:exec
. Para obtener más información, consulta la
referencia de comandos de los emuladores.
Visualiza la actividad de las reglas de seguridad
A medida que trabajas con prototipos y bucles de prueba, puedes usar las herramientas de visualización y los informes que proporciona Local Emulator Suite.
Visualiza las evaluaciones de las reglas
A medida que agregas reglas de seguridad a tu prototipo, puedes depurarlas con las herramientas de Local Emulator Suite.
Luego de ejecutar un conjunto de pruebas, puedes acceder a los informes de cobertura de pruebas que muestran cómo se evaluaron tus reglas. Para obtenerlos, envía una consulta a un extremo expuesto en el emulador mientras está en ejecución. Usa la siguiente URL para obtener una versión compatible con navegadores:
http://localhost:9000/.inspect/coverage?ns=<database_name>
Esto divide tus reglas en expresiones y subexpresiones sobre las que puedes desplazar el mouse para obtener más información, como la cantidad de ejecuciones y los valores mostrados. Si quieres acceder a la versión JSON sin procesar de los datos, incluye la siguiente URL en la consulta:
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
Próximos pasos
- Para mirar un conjunto de videos seleccionado y obtener ejemplos prácticos detallados, consulta la lista de videos de capacitación sobre emuladores de Firebase.
- Investiga casos de uso avanzados en los que se utilizan pruebas de reglas de seguridad y el SDK de Firebase Test en el artículo sobre cómo probar las reglas de seguridad con Realtime Database.
- Dado que las funciones activadas son una integración típica con Realtime Database, obtén más información sobre el emulador de Cloud Functions para Firebase en Ejecuta funciones de manera local.