Conecte su aplicación al emulador de base de datos en tiempo real

Antes de conectar su aplicación al emulador de Realtime Database, asegúrese de comprender el flujo de trabajo general de Firebase Local Emulator Suite , de instalar y configurar Local Emulator Suite y de revisar sus comandos CLI .

Elige un proyecto de Firebase

Firebase Local Emulator Suite emula productos para un único proyecto de Firebase.

Para seleccionar el proyecto a usar, antes de iniciar los emuladores, en la CLI ejecute firebase use en su directorio de trabajo. O puede pasar el indicador --project a cada comando del emulador.

Local Emulator Suite admite la emulación de proyectos reales de Firebase y proyectos de demostración .

Tipo de proyecto Características Usar con emuladores
Real

Un proyecto real de Firebase es uno que usted creó y configuró (muy probablemente a través de la consola de Firebase).

Los proyectos reales tienen recursos activos, como instancias de bases de datos, depósitos de almacenamiento, funciones o cualquier otro recurso que configure para ese proyecto de Firebase.

Cuando trabajas con proyectos reales de Firebase, puedes ejecutar emuladores para cualquiera o todos los productos compatibles.

Para cualquier producto que no esté emulando, sus aplicaciones y código interactuarán con el recurso activo (instancia de base de datos, depósito de almacenamiento, función, etc.).

Manifestación

Un proyecto de demostración de Firebase no tiene una configuración real de Firebase ni recursos activos. Por lo general, se accede a estos proyectos a través de codelabs u otros tutoriales.

Los ID de proyecto para proyectos de demostración tienen el prefijo demo- .

Cuando trabajas con proyectos de demostración de Firebase, tus aplicaciones y código interactúan solo con emuladores. Si su aplicación intenta interactuar con un recurso para el cual no se está ejecutando un emulador, ese código fallará.

Le recomendamos que utilice proyectos de demostración siempre que sea posible. Beneficios incluidos:

  • Configuración más sencilla, ya que puedes ejecutar los emuladores sin tener que crear un proyecto de Firebase.
  • Mayor seguridad, ya que si su código invoca accidentalmente recursos (de producción) no emulados, no hay posibilidad de cambio de datos, uso y facturación.
  • Mejor soporte fuera de línea, ya que no es necesario acceder a Internet para descargar la configuración del SDK.

Instrumenta tu aplicación para hablar con los emuladores

Plataformas Android, Apple y SDK web

Configure su configuración en la aplicación o 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);
Rápido
    // 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 modular API

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 namespaced API

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 configuración adicional para probar las funciones de la nube activadas por eventos de Realtime Database usando el emulador. Cuando los emuladores Realtime Database y Cloud Functions se están ejecutando, funcionan juntos automáticamente.

SDK de administrador

Los SDK de Firebase Admin se conectan automáticamente al emulador de Realtime Database cuando se configura la variable de entorno FIREBASE_DATABASE_EMULATOR_HOST :

export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"

Si su código se ejecuta dentro del emulador de Cloud Functions, su ID de proyecto y otras configuraciones se establecerán automáticamente al llamar initializeApp .

Si desea que su código Admin SDK se conecte a un emulador compartido que se ejecuta en otro entorno, deberá especificar el mismo ID de proyecto que configuró mediante Firebase CLI . Puede pasar un ID de proyecto para initializeApp directamente o configurar la variable de entorno GCLOUD_PROJECT .

SDK de administración de Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variable ambiental
export GCLOUD_PROJECT="your-project-id"

Borre su base de datos entre pruebas

Para vaciar la base de datos en tiempo real entre actividades, puede borrar la referencia de la base de datos. Puede utilizar este enfoque como alternativa a simplemente cerrar el 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);
Rápido
// With a DatabaseReference, write nil to clear the database.
    Database.database().reference().setValue(nil);

Web modular API

import { getDatabase, ref, set } from "firebase/database";

// With a database Reference, write null to clear the database.
const db = getDatabase();
set(ref(db), null);

Web namespaced API

// With a database Reference, write null to clear the database.
firebase.database().ref().set(null);

Naturalmente, su código debe esperar la confirmación de que la descarga finalizó o falló utilizando las funciones de manejo de eventos asincrónicos de su plataforma.

Habiendo implementado un paso como este, puede secuenciar sus pruebas y activar sus funciones con la confianza de que los datos antiguos se eliminarán entre ejecuciones y que estará utilizando una configuración de prueba de referencia nueva.

Importar y exportar datos

La base de datos y los emuladores de Cloud Storage para Firebase te permiten exportar datos desde una instancia de emulador en ejecución. Defina un conjunto de datos de referencia para usar en sus pruebas unitarias o flujos de trabajo de integración continua, luego expórtelo para compartirlo con el equipo.

firebase emulators:export ./dir

En las pruebas, al iniciar el emulador, importe los datos de referencia.

firebase emulators:start --import=./dir

Puede indicarle al emulador que exporte datos al apagarlo, ya sea especificando una ruta de exportación o simplemente usando la ruta pasada al indicador --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, consulte la referencia de comandos del emulador .

Visualizar la actividad de reglas de seguridad

A medida que trabaja en prototipos y bucles de prueba, puede utilizar herramientas de visualización e informes proporcionados por Local Emulator Suite.

Visualizar evaluaciones de reglas

A medida que agrega reglas de seguridad a su prototipo, puede depurarlas con las herramientas de Local Emulator Suite.

Después de ejecutar un conjunto de pruebas, puede acceder a informes de cobertura de pruebas que muestran cómo se evaluó cada una de sus reglas. Para obtener los informes, consulte un punto final expuesto en el emulador mientras se está ejecutando. Para obtener una versión compatible con el navegador, utilice la siguiente URL:

http://localhost:9000/.inspect/coverage?ns=<database_name>

Esto divide sus reglas en expresiones y subexpresiones sobre las que puede pasar el mouse para obtener más información, incluido el número de ejecuciones y los valores devueltos. Para la versión JSON sin formato de estos datos, incluya la siguiente URL en su consulta:

http://localhost:9000/.inspect/coverage.json?ns=<database_name>

¿Qué sigue?