获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

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 las credenciales de administrador.

  • Los disparadores 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 Autenticación 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 tanto si usas el shell de Cloud Functions como firebase emulators:start .

Para configurar las credenciales de administrador para las funciones emuladas:

  1. Abra el panel Cuentas de servicio de Google Cloud Console.
  2. Asegúrate de que la cuenta de servicio predeterminada de App Engine esté seleccionada y usa 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 a admin.auth().getUserByEmail(email) .

Servir funciones mediante 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 disparadores de Realtime Database, Cloud Firestore y PubSub, y es opcional para todos los demás tipos de funciones. Además, el parámetro de options opcionales solo es válido para las funciones de 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 usar 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útelo dentro del directorio de 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 NPM de request , pero reemplace la 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 de HTTPS

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

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

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

# 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

Cuando ejecute las funciones de Realtime Database localmente, deberá proporcionar los datos de prueba apropiados. 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 en la simulación de comodines 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 Realtime Database con privilegios de administrador (cuenta de servicio). Utilice la opción de auth para ejecutar funciones como un usuario final en 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 de data , puede usar los campos de 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 las funciones de Firestore con privilegios administrativos, lo que significa que simula un evento de creación/actualización/eliminación como si lo hubiera hecho un usuario administrativo.

Invocar funciones de PubSub

Para las funciones de PubSub, inserte la carga de su mensaje en una instancia de 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 necesita su función:

var data = {
  eventDim: [{
    // populates event.data.params
    params:{foo:'bar'},
    // 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. Sus datos de 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.