Tester les fonctions de manière interactive

Le shell Cloud Functions fournit un shell interactif pour appeler des fonctions avec des données de test. Le shell prend en charge tous les types de déclencheurs.

Configurer les informations d'identification d'administrateur (facultatif)

Si vous voulez que vos tests de fonctions d'interagir avec les API Google ou d' autres API via le Firebase Firebase Administrateur SDK , vous devrez peut - être configurer les informations d' identification d'administration.

  • Cloud FireStore et en temps réel triggers ont déjà des informations d' identification suffisantes, et ne nécessitent pas de configuration supplémentaire.
  • Toutes les autres API, y compris les API Firebase telles que Authentication et FCM ou les API Google telles que Cloud Translation ou Cloud Speech, nécessitent les étapes de configuration décrites dans cette section. Cela vaut si vous utilisez les fonctions shell ou firebase emulators:start .

Pour configurer les informations d'identification d'administrateur pour les fonctions émulées :

  1. Ouvrez le volet des comptes de service de la Google Cloud Console.
  2. Assurez - vous que App Engine compte de service par défaut est sélectionné et utilisez le menu d'options à droite pour sélectionner Créer clé.
  3. Lorsque vous êtes invité, sélectionnez JSON pour le type de clé, puis cliquez sur Créer.
  4. Définissez vos identifiants Google par défaut pour qu'ils pointent vers la clé téléchargée :

    Unix

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

    les fenêtres

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

Une fois ces étapes, vos tests de fonctions peuvent accéder Firebase et les API Google à l' aide du SDK d' administration . Par exemple, lors du test d' un déclencheur d' authentification, la fonction émulé pourrait appeler admin.auth().getUserByEmail(email) - admin.auth().getUserByEmail(email) .

Diffuser des fonctions à l'aide d'un shell Cloud Functions

Le shell Cloud Functions émule tous les types de déclencheurs de fonction avec un shell interactif pour appeler les fonctions avec des données de test. Les options varient selon le type de fonction, mais le format d'utilisation de base est :

myFunctionName(data, options)

Les data paramètre est requis pour la base de données en temps réel, Nuage Firestore, et déclenche PubSub, et en option pour tous les autres types de fonctions. En outre, l'option des options paramètre est valide uniquement pour la base de données en temps réel et des fonctions cloud FireStore.

En option, vous pouvez charger des données de test à partir d'un fichier local en enregistrant le fichier en tant que variable et en appelant une fonction avec :

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

Installer et configurer le shell Cloud Functions

Pour utiliser cette fonction, firebase-tools doivent avoir la version minimum 3.11.0 et firebase-functions SDK doit avoir au minimum la version 0.6.2. Pour mettre à jour à la fois, exécutez les commandes suivantes dans la functions/ répertoire pour votre projet:

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

Si vous utilisez des variables de configuration des fonctions personnalisées, exécutez d' abord la commande pour obtenir votre configuration personnalisée (exécuter ce dans le functions répertoire) dans votre environnement local:

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

Enfin, exécutez le shell avec la commande suivante :

firebase functions:shell

Appeler des fonctions HTTPS

Pour les fonctions HTTPS dans invoquant le shell, l' utilisation est la même que la request module de NPM, mais remplacer la request avec le nom de la fonction que vous voulez imiter. Par example:

# 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' })

Appeler des fonctions appelables HTTPS

Lorsque vous appelez des fonctions HTTPS Callable localement, vous devrez fournir les données de test appropriées.

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

En option, vous pouvez passer un Firebase-Instance-ID-token comme second paramètre. Ce doit être une chaîne.

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

Emulation de context.auth est actuellement indisponible.

Appeler les fonctions de la base de données en temps réel

Lors de l'exécution locale des fonctions de la base de données en temps réel, vous devrez fournir les données de test appropriées. Cela signifie généralement fournir de nouvelles données de test pour onCreate opérations, les données anciennes / retirées à la recherche onDelete opérations, et aussi bien pour onUpdate ou onWrite fonctions:

# invoke onCreate function
myDatabaseFunction('new_data')

# invoke onDelete function
myDatabaseFunction('old_data')

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

En plus de l' before/after les options, le shell fournit la params possibilité d'utiliser en se moquant wildcards dans un chemin:

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

Par défaut, le shell exécute les fonctions de la base de données en temps réel avec des privilèges d'administrateur (compte de service). Utilisez la auth option de fonctions au lieu lancée par un utilisateur final particulier, ou en tant qu'utilisateur non authentifié:

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

Appeler les fonctions Firestore

Lors de l'exécution des fonctions Firestore localement, vous devrez fournir les données de test appropriées. Cela signifie généralement fournir de nouvelles données de test pour onCreate opérations, les données anciennes / retirées à la recherche onDelete opérations, et aussi bien pour onUpdate ou onWrite fonctions. Notez que les données Firestore doivent être des paires clé-valeur ; voir pris en charge les types de données .

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

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

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

En plus des before/after les champs de data objet, vous pouvez utiliser les params champs sur les options de objectent à wildcards fantaisie dans un nom de document:

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

Le shell exécute toujours les fonctions Firestore avec des privilèges administratifs, ce qui signifie qu'il se moque d'un événement de création/mise à jour/suppression comme s'il était effectué par un utilisateur administratif.

Appeler les fonctions PubSub

Pour les fonctions PubSub, insérez votre charge utile de message dans une Buffer instance et ajouter éventuellement des attributs de données comme indiqué:

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

Appeler les fonctions d'analyse

Vous pouvez appeler une fonction Analytics sans aucune donnée en exécutant myAnalyticsFunction() dans la coquille. Pour exécuter la fonction avec des données de test, il est recommandé de définir une variable pour les champs de données d'événement spécifiques dont votre fonction a besoin :

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);

Appeler les fonctions Storage, Auth et Crashlytics

Pour les fonctions Storage, Auth et Crashlytics, appelez la fonction locale avec les données de test que vous souhaitez voir à l'intérieur de la fonction. Vos données de test doivent respecter les formats de données correspondants :

Spécifiez uniquement les champs dont dépend votre code, ou aucun si vous souhaitez uniquement exécuter la fonction.