Catch up on everthing we announced at this year's Firebase Summit. Learn more

Conecta tu app al emulador de Cloud Functions

Antes de conectar tu app al emulador de Cloud Functions, 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.

A fin de 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.

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 ID de proyectos de los proyectos de demostración tienen el prefijo demo-.

Cuando trabajas con proyectos de demostración, 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 probabilidad 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

Instrumenta la app para funciones que admiten llamadas

Si tus actividades de prototipado y realización de pruebas involucran funciones de backend que admiten llamadas, configura la interacción con el emulador de Cloud Functions para Firebase de la siguiente manera:

Android
        // 10.0.2.2 is the special IP address to connect to the 'localhost' of
        // the host computer from an Android emulator.
        FirebaseFunctions functions = FirebaseFunctions.getInstance();
        functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://localhost:5001")

Web versión 9

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "localhost", 5001);

Web versión 8

firebase.functions().useEmulator("localhost", 5001);

Instrumenta la app para emular funciones HTTPS

Se entregará cada función HTTPS de tu código desde el emulador local con el siguiente formato de URL:

http://$HOST:$PORT/$PROJECT/$REGION/$NAME

Por ejemplo, una función helloWorld simple con el puerto y la región de host predeterminados se entregarían en la siguiente ubicación:

https://localhost:5001/$PROJECT/us-central1/helloWorld

Instrumenta la app para emular funciones activadas en segundo plano

El emulador de Cloud Functions admite funciones activadas en segundo plano de las siguientes fuentes:

  • Emulador de Realtime Database
  • Emulador de Cloud Firestore
  • Emulador de Authentication
  • Emulador de Pub/Sub

Para activar eventos en segundo plano, conecta la app o el código de prueba a los emuladores con el SDK de tu plataforma.

¿Qué otras herramientas existen para probar Cloud Functions?

El emulador de Cloud Functions se complementa con otras herramientas de prototipado y pruebas, como las siguientes:

  • La shell de Cloud Functions, que permite el prototipado y el desarrollo de funciones interactivas e iterativas. La shell utiliza el emulador de Cloud Functions con una interfaz de estilo REPL para llevar a cabo el desarrollo. No se proporciona ninguna integración en los emuladores de Cloud Firestore o Realtime Database. Con la shell, puedes simular datos y realizar llamadas a funciones para imitar la interacción con productos que Local Emulator Suite no admite actualmente, como Cloud Storage, Pub/Sub, Analytics, Remote Config, Storage, Auth y Crashlytics.
  • El SDK de Firebase Test para Cloud Functions, un framework de Node.js con Mocha para desarrollar funciones. Cuando se implementa, el SDK de Firebase Test para Cloud Functions proporciona automatización sobre la shell de Cloud Functions.

Puedes encontrar más información sobre la shell de Cloud Functions y el SDK de Firebase Test para Cloud Functions en Prueba funciones de forma interactiva y Prueba de unidades de Cloud Functions.

Diferencias entre el emulador de Cloud Functions y el entorno de producción

El emulador de Cloud Functions es bastante parecido al entorno de producción en la mayoría de los casos de uso. Nos esforzamos mucho para asegurarnos de que todos los elementos del entorno de ejecución del nodo sean lo más similares posible a la producción. Sin embargo, el emulador no imita el entorno de producción alojado en contenedores por completo, por lo que, si bien el código de tu función se ejecutará de forma realista, otros aspectos del entorno (es decir, archivos locales, el comportamiento después de fallas de las funciones, etc.) no lo harán.

Cloud IAM

Firebase Emulator Suite no intenta replicar ni respetar ningún comportamiento relacionado con la IAM para la ejecución. Los emuladores cumplen con las reglas de seguridad de Firebase proporcionadas, pero, en situaciones en las que normalmente se usaría la IAM (por ejemplo, para configurar Cloud Functions que invoquen la cuenta de servicio y los permisos), el emulador no se puede configurar y utiliza la cuenta con disponibilidad global en tu máquina de desarrollador, de manera similar a ejecutar una secuencia de comandos local directamente.

Restricciones de memoria y procesador

El emulador no aplica restricciones de memoria o procesador para tus funciones. Sin embargo, sí admite funciones de tiempo de espera a través del argumento de tiempo de ejecución timeoutSeconds.

Ten en cuenta que el tiempo de ejecución de la función puede diferir de la producción cuando las funciones se ejecutan en el emulador. Te recomendamos que, después de diseñar y probar funciones con el emulador, ejecutes pruebas limitadas en la producción para confirmar los tiempos de ejecución.

Planifica diferencias en los entornos locales y de producción

Ya que el emulador se ejecuta en la máquina local, depende de tu entorno local para las aplicaciones y las utilidades y los programas integrados.

Ten en cuenta que el entorno local para el desarrollo de funciones puede diferir del entorno de producción de Google:

  • Las aplicaciones que instalas de forma local para simular el entorno de producción (p. ej., ImageMagick de este instructivo) pueden tener un comportamiento diferente en la producción, en especial si necesitas una versión diferente o desarrollas en un entorno que no es Linux. Te recomendamos implementar tu propia copia binaria del programa faltante junto con la implementación de tu función.

  • De manera similar, las utilidades integradas (p. ej., los comandos de shell como ls y mkdir) pueden diferir de las versiones disponibles en producción, sobre todo si desarrollas en un entorno que no es Linux (p. ej., macOS). Para manejar este problema, puedes usar alternativas a los comandos nativos que sean exclusivas de Node.js o compilar objetos binarios de Linux para empaquetarlos con la implementación.

Reintentos

El emulador de Cloud Functions no admite reintentar las funciones en caso de falla.

Próximos pasos