Prueba y despliegue de Firebase Functions

Clase 6 de 22Curso de Firebase 5: Cloud Functions

Resumen

Domina el flujo completo para probar y desplegar Firebase Functions con variables de entorno seguras, emulación local con shell y ajustes clave de Firestore. Aquí entenderás cómo configurar credenciales para un email helper, cómo invocar funciones con datos de prueba y cómo resolver errores frecuentes con confianza.

¿Cómo preparar variables de entorno en Firebase Functions?

Configurar variables en el servidor evita exponer credenciales en el código. Con Firebase puedes definirlas y consultarlas fácilmente desde la terminal y consumirlas en tus funciones.

¿Qué comandos usar para ver y definir config?

  • Ver variables actuales en el servidor.
firebase functions:config:get
  • Definir variables necesarias para el envío de correo.
firebase functions:config:set configuration.email="gdcaly@gmail.com" configuration.password="<tu_password>"
  • Descargar la configuración para usarla localmente en un archivo llamado runtimeconfig.json.
firebase functions:config:get
# guarda el resultado en runtimeconfig.json
  • Consumir variables en el código con Functions.
// Dentro del código de Cloud Functions
typeof functions !== 'undefined' && functions.config && functions.config().configuration;

const email = functions.config().configuration.email;
const password = functions.config().configuration.password;
  • Beneficio clave: usar credenciales sin dejarlas en el repositorio.

¿Cómo emular y probar funciones de forma local con shell?

Probar en local evita desplegar cambios innecesarios. Con firebase functions:shell se emulan los entornos de tus funciones, incluido el de autenticación, y puedes pasar datos de prueba como si vinieran de Firebase.

¿Cómo traer config del servidor a local runtime?

  • Descarga las variables de entorno del servidor a runtimeconfig.json para que el emulador las lea.
  • Luego inicia el shell de Functions.
firebase functions:shell
  • Si renombraste funciones (por ejemplo: "eliminación" y "creación de usuario CRM"), asegúrate de que cada nombre sea único para evitar sobreescrituras. Si ya corriste el emulador, sal con Control+C y vuelve a ejecutar el shell.

¿Cómo invocar funciones con datos de prueba?

  • Para un disparador de autenticación, Firebase envía el usuario creado cuando está desplegado. En local, emula el evento pasando un objeto JSON con los campos usados por tu controlador, como displayName y email.
  • Ejemplo conceptual de invocación en el shell (estructura de prueba):
creacionDeUsuario({
  displayName: 'Juan Guillermo',
  email: 'usuario@correo.com'
});
  • El shell mostrará el resultado de la invocación y los logs del proceso.

¿Cómo resolver errores comunes durante la emulación?

  • Error: “la aplicación de Firebase por defecto no existe”.
  • Solución: inicializa el SDK de admin. js const admin = require('firebase-admin'); admin.initializeApp();
  • Ajuste obligatorio en Firestore: tratar fechas como timestamp.
  • Solución: configura settings. js const admin = require('firebase-admin'); admin.firestore().settings({ timestamp: true });
  • Nombres de función duplicados.
  • Solución: usa nombres únicos como "eliminación" y "creación de usuario CRM" y reinicia el shell.
  • Validación de resultados.
  • Revisa los logs y, si tu función envía correo, verifica el inbox: por ejemplo, asunto “Bienvenido a la comunidad”.

¿Qué habilidades y conceptos clave refuerzas?

Este flujo consolida buenas prácticas de backend con Functions y mejora tu eficiencia al depurar.

  • Variables de entorno en Functions: proteger credenciales como email y password sin exponerlas en el código. Uso de functions.config().configuration.email y functions.config().configuration.password.
  • Comandos de Firebase CLI: firebase functions:config:get, firebase functions:config:set, firebase functions:shell para gestionar configuración y emulación.
  • Archivo runtime local: runtimeconfig.json para replicar configuración del servidor en pruebas locales.
  • Emulación con shell: invocar funciones y simular disparadores de autenticación con datos de prueba en JSON.
  • Inicialización de admin: admin.initializeApp() para habilitar credenciales y acceso a librerías de Firebase.
  • Ajustes de Firestore: admin.firestore().settings({ timestamp: true }) para tratar fechas correctamente como timestamp.
  • Buenas prácticas de nombres: funciones con nombres únicos para evitar sobreescritura en el emulador.
  • Lectura de logs: interpretar mensajes del shell para identificar causas y soluciones sugeridas.

¿Probaste este flujo y te funcionó la emulación con shell y el email helper? Comparte tu experiencia y dudas en los comentarios.

      Prueba y despliegue de Firebase Functions