Entérate de todos los anuncios de Firebase Summit y descubre cómo Firebase puede ayudarte a acelerar el desarrollo de las apps y a ejecutarlas con confianza. Más información

Conecte su aplicación al emulador de Cloud Firestore

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

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

Elija un proyecto de Firebase

Firebase Local Emulator Suite emula productos para un solo 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 bien, 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ó (probablemente a través de la consola de Firebase).

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

Cuando trabaje con proyectos reales de Firebase, puede ejecutar emuladores para cualquiera o todos los productos admitidos.

Para cualquier producto que no esté emulando, sus aplicaciones y código interactuarán con el recurso en vivo (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- .

Al trabajar con proyectos de demostración de Firebase, sus aplicaciones y código interactúan solo con emuladores . Si su aplicación intenta interactuar con un recurso para el que 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 puede 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 sin conexión, ya que no es necesario acceder a Internet para descargar la configuración de su SDK.

Instrumenta tu aplicación para hablar con los emuladores

Android, plataformas de Apple y SDK web

Configure su configuración en la aplicación o clases de prueba para interactuar con Cloud Firestore de la siguiente manera.

Androide
// 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);
Rápido
let settings = Firestore.firestore().settings
settings.host = "localhost:8080"
settings.isPersistenceEnabled = false 
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Web version 9

import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, 'localhost', 8080);

Web version 8

// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 8080);
}

No se necesita configuración adicional para probar Cloud Functions activadas por eventos de Firestore usando el emulador. Cuando los emuladores de Firestore y Cloud Functions se están ejecutando, funcionan juntos automáticamente.

SDK de administración

Los SDK de Firebase Admin se conectan automáticamente al emulador de Cloud Firestore cuando se establece la variable de entorno FIRESTORE_EMULATOR_HOST :

export FIRESTORE_EMULATOR_HOST="localhost:8080"

Si su código se ejecuta dentro del emulador de Cloud Functions, su ID de proyecto y otra configuración se establecerán automáticamente al llamar a initalizeApp .

Si desea que su código SDK de administrador 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 establecer 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"

Limpia tu base de datos entre pruebas

Production Firestore no proporciona ningún método SDK de plataforma para vaciar la base de datos, pero el emulador de Firestore le brinda un punto final REST específicamente para este propósito, al que se puede llamar desde un paso de configuración/desmontaje del marco de prueba, desde una clase de prueba o desde el shell (p. ej. , con curl ) antes de que comience una prueba. Puede utilizar este enfoque como una alternativa a simplemente cerrar el proceso del emulador.

En un método apropiado, realiza una operación HTTP DELETE, proporcionando tu Firebase projectID, por ejemplo, firestore firestore-emulator-example , al siguiente punto final:

"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

Naturalmente, su código debe esperar la confirmación REST de que el vaciado finalizó o falló.

Puede realizar esta operación desde el shell:

// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

Después de implementar 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 está utilizando una nueva configuración de prueba de referencia.

Importar y exportar datos

La base de datos y los emuladores de Cloud Storage para Firebase le 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 apagar, 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 firebase emulators:exec . Para obtener más información, consulte la referencia de comandos del emulador .

Visualizar la actividad de las reglas de seguridad

A medida que trabaja con prototipos y bucles de prueba, puede usar las herramientas de visualización y los informes proporcionados por Local Emulator Suite.

Usar el Monitor de Solicitudes

El emulador de Cloud Firestore le permite visualizar las solicitudes de los clientes en la interfaz de usuario de Emulator Suite, incluido el seguimiento de evaluación para las reglas de seguridad de Firebase.

Abra la pestaña Firestore > Solicitudes para ver la secuencia de evaluación detallada de cada solicitud.

Firestore Emulator Requests Monitor que muestra las evaluaciones de las reglas de seguridad

Visualizar informes de evaluación de reglas

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

Después de ejecutar un conjunto de pruebas, puede acceder a los informes de cobertura de prueba que muestran cómo se evaluó cada una de sus reglas de seguridad.

Para obtener los informes, consulta un extremo expuesto en el emulador mientras se está ejecutando. Para obtener una versión compatible con el navegador, use la siguiente URL:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

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

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage

Aquí, la versión HTML del informe destaca las evaluaciones que arrojan errores indefinidos y de valor nulo:

En qué se diferencia el emulador de Cloud Firestore de la producción

El emulador de Cloud Firestore intenta replicar fielmente el comportamiento del servicio de producción con algunas limitaciones notables.

Actas

Actualmente, el emulador no implementa todo el comportamiento de las transacciones visto en producción. Cuando estás probando funciones que implican varias escrituras simultáneas en un documento, el emulador puede tardar en completar las solicitudes de escritura. En algunos casos, los bloqueos pueden tardar hasta 30 segundos en liberarse. Considere ajustar los tiempos de espera de las pruebas en consecuencia, si es necesario.

Índices

El emulador no realiza un seguimiento de los índices compuestos y, en su lugar, ejecutará cualquier consulta válida. Asegúrese de probar su aplicación con una instancia real de Cloud Firestore para determinar qué índices necesitará.

Límites

El emulador no impone todos los límites impuestos en la producción. Por ejemplo, el emulador puede permitir transacciones que el servicio de producción rechazaría por considerarlas demasiado grandes. Asegúrese de estar familiarizado con los límites documentados y de diseñar su aplicación para evitarlos de manera proactiva.

¿Qué sigue?