Probar funciones de forma interactiva

El shell de Cloud Functions proporciona un shell interactivo para invocar funciones con datos de prueba. El shell admite todos los tipos de disparadores.

Configurar credenciales de administrador (opcional)

Si desea que sus pruebas de funciones interactúen con las API de Google u otras API de Firebase a través del SDK de administrador de Firebase , es posible que deba configurar credenciales de administrador.

  • Los activadores de Cloud Firestore y Realtime Database ya tienen credenciales suficientes y no requieren configuración adicional.
  • Todas las demás API, incluidas las API de Firebase, como Authentication y FCM, o las API de Google, como Cloud Translation o Cloud Speech, requieren los pasos de configuración que se describen en esta sección. Esto se aplica ya sea que estés usando el shell de Cloud Functions o firebase emulators:start .

Para configurar credenciales de administrador para funciones emuladas:

  1. Abra el panel Cuentas de servicio de la consola de Google Cloud.
  2. Asegúrese de que la cuenta de servicio predeterminada de App Engine esté seleccionada y use el menú de opciones a la derecha para seleccionar Crear clave .
  3. Cuando se le solicite, seleccione JSON para el tipo de clave y haga clic en Crear .
  4. Configure sus credenciales predeterminadas de Google para que apunten a la clave descargada:

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase functions:shell
    

    ventanas

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase functions:shell
    

Después de completar estos pasos, sus pruebas de funciones pueden acceder a las API de Firebase y Google mediante el SDK de administrador . Por ejemplo, al probar un activador de autenticación, la función emulada podría llamar admin.auth().getUserByEmail(email) .

Servir funciones usando un shell de Cloud Functions

El shell de Cloud Functions emula todos los tipos de activadores de funciones con un shell interactivo para invocar las funciones con datos de prueba. Las opciones varían según el tipo de función, pero el formato de uso básico es:

myFunctionName(data, options)

El parámetro data es obligatorio para los activadores de Realtime Database, Cloud Firestore y PubSub, y es opcional para todos los demás tipos de funciones. Además, el parámetro options opcional es válido solo para las funciones Realtime Database y Cloud Firestore.

Opcionalmente, puede cargar datos de prueba desde un archivo local guardando el archivo como una variable e invocando una función con él:

var data = require('./path/to/testData.json');
myFunction(data);

Instalar y configurar el shell de Cloud Functions

Para utilizar esta función, firebase-tools debe tener la versión mínima 3.11.0 y el SDK firebase-functions debe tener la versión mínima 0.6.2. Para actualizar ambos, ejecute los siguientes comandos en el directorio functions/ de su proyecto:

npm install --save firebase-functions@latest
npm install -g firebase-tools

Si está utilizando variables de configuración de funciones personalizadas, primero ejecute el comando para obtener su configuración personalizada (ejecútela dentro del directorio functions ) en su entorno local:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

Finalmente, ejecute el shell con el siguiente comando:

firebase functions:shell

Invocar funciones HTTPS

Para invocar funciones HTTPS en el shell, el uso es el mismo que el del módulo request NPM, pero reemplace request con el nombre de la función que desea emular. Por ejemplo:

# invoke
myHttpsFunction()
myHttpsFunction.get()
myHttpsFunction.post()

# invoke at sub-path
myHttpsFunction('/path')
myHttpsFunction.get('/path')
myHttpsFunction.post('/path')

# send POST request with form data
myHttpsFunction.post('/path').form( {foo: 'bar' })

Invocar funciones invocables HTTPS

Al invocar funciones HTTPS invocables localmente, deberá proporcionar los datos de prueba adecuados.

# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})

Opcionalmente, puedes pasar un Firebase-Instance-ID-token como segundo parámetro. Esto debe ser una cuerda.

# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})

La emulación de context.auth no está disponible actualmente.

Invocar funciones de base de datos en tiempo real

Al ejecutar las funciones de Realtime Database localmente, deberá proporcionar los datos de prueba adecuados. Esto generalmente significa proporcionar nuevos datos de prueba para las operaciones onCreate , datos antiguos/eliminados para las operaciones onDelete y tanto para las funciones onUpdate como onWrite :

# invoke onCreate function
myDatabaseFunction('new_data')

# invoke onDelete function
myDatabaseFunction('old_data')

# invoke onUpdate or onWrite function
myDatabaseFunction({before: 'old_data', after: 'new_data' })

Además de las opciones before/after , el shell proporciona la opción params para usar como comodines simulados en una ruta:

# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})

De forma predeterminada, el shell ejecuta funciones de base de datos en tiempo real con privilegios de administrador (cuenta de servicio). Utilice la opción auth para ejecutar funciones como un usuario final particular o como un usuario no autenticado:

# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})

Invocar funciones de Firestore

Cuando ejecute las funciones de Firestore localmente, deberá proporcionar los datos de prueba adecuados. Esto generalmente significa proporcionar nuevos datos de prueba para las operaciones onCreate , datos antiguos/eliminados para las operaciones onDelete y tanto para las funciones onUpdate como onWrite . Tenga en cuenta que los datos de Firestore deben ser pares clave-valor; consulte Tipos de datos admitidos .

# invoke onCreate function
myFirestoreFunction({foo: ‘new’})

# invoke onDelete function
myFirestoreFunction({foo: ‘old’})

# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })

Además de los campos before/after del objeto data , puede usar los campos params en el objeto de options para simular comodines en el nombre de un documento:

# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})

El shell siempre ejecuta funciones de Firestore con privilegios administrativos, lo que significa que se burla de un evento de creación/actualización/eliminación como si lo hiciera un usuario administrativo.

Invocar funciones de PubSub

Para las funciones de PubSub, inserte la carga útil de su mensaje en una instancia Buffer y agregue opcionalmente atributos de datos como se muestra:

// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})

Invocar funciones de Analytics

Puede invocar una función de Analytics sin ningún dato ejecutando myAnalyticsFunction() en el shell. Para ejecutar la función con datos de prueba, se recomienda definir una variable para los campos de datos de eventos específicos que su función necesita:

var data = {
  eventDim: [{
    // populates event.data.params
    params: {foo: {stringValue: 'bar'} },
    // Also valid:
    //   {intValue: '10'}, {floatValue: '1.0'}, {doubleValue: '1.0'}
    // populates event.data.name
    name: 'event_name',
    // populates event.data.logTime, specify in microseconds
    timestampMicros: Date.now() * 1000,
    // populates event.data.previousLogTime, specify in microseconds
    previousTimestampMicros: Date.now() * 1000,
    // populates event.data.reportingDate, specify in 'YYYYMMDD' format
    date: '20170930',
    // populates event.data.valueInUSD
    valueInUsd: 230
  }],
  userDim: userDim
};

myAnalyticsFunction(data);

Invocar funciones de almacenamiento y autenticación

Para las funciones de almacenamiento y autenticación, invoque la función local con los datos de prueba que le gustaría ver dentro de la función. Los datos de su prueba deben seguir los formatos de datos correspondientes:

Especifique solo los campos de los que depende su código, o ninguno si solo desea ejecutar la función.