Le shell Cloud Functions fournit un shell interactif pour appeler avec des données de test. Le shell est compatible avec tous les types de déclencheurs.
Configurer des identifiants d'administrateur (facultatif)
Si vous souhaitez que vos tests de fonctions interagissent avec les API Google ou d'autres API Firebase API via le SDK Admin Firebase, vous devrez peut-être configurer avec les identifiants de l'administrateur.
- Les déclencheurs Cloud Firestore et Realtime Database disposent déjà d'identifiants suffisants 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 comme Cloud Translation ou Cloud Speech, nécessitent la procédure de configuration décrite dans cette section. Cela s'applique que vous utilisiez le shell Cloud Functions ou
firebase emulators:start
.
Pour configurer les identifiants d'administrateur pour les fonctions émulées:
- Ouvrez le Volet des comptes de service de la console Google Cloud.
- Assurez-vous que l'option Compte de service par défaut App Engine est sélectionnée, puis utilisez le menu d'options à droite pour sélectionner Créer une clé.
- Lorsque vous y êtes invité, sélectionnez JSON comme type de clé, puis cliquez sur Créer.
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
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase functions:shell
Une fois cette procédure terminée, les tests de vos fonctions peuvent accéder aux API Firebase et Google à l'aide du SDK Admin. Par exemple, lors du test
un déclencheur Authentication, la fonction émulée peut appeler
admin.auth().getUserByEmail(email)
Exécuter 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 permettant d'appeler les fonctions avec des données de test. Les options varient par type de fonction, mais le format d'utilisation de base est le suivant:
myFunctionName(data, options)
Le paramètre data
est obligatoire pour Realtime Database, Cloud Firestore,
et les déclencheurs Pub/Sub, et facultatif pour tous les autres types de fonctions.
De plus, le paramètre options
facultatif n'est valide que pour les fonctions Realtime Database et Cloud Firestore.
Vous pouvez aussi charger des données de test en enregistrant le fichier en tant que variable et en appelant une fonction:
var data = require('./path/to/testData.json');
myFunction(data);
Installer et configurer l'interface système Cloud Functions
Pour utiliser cette fonctionnalité, firebase-tools
doit disposer au minimum de la version 3.11.0.
Le SDK firebase-functions
doit être au minimum de la version 0.6.2. Pour mettre à jour les deux,
Exécutez les commandes suivantes dans le répertoire functions/
de votre projet:
npm install --save firebase-functions@latest
npm install -g firebase-tools
Si vous utilisez des variables de configuration de fonctions personnalisées, exécutez d'abord la
pour obtenir votre configuration personnalisée (exécutez-la dans le répertoire functions
)
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 à l'aide de la commande suivante:
firebase functions:shell
Appeler des fonctions HTTPS
Pour appeler des fonctions HTTPS dans le shell, l'utilisation est la même que
request
module NPM, mais remplacez
request
par le nom de la fonction que vous souhaitez émuler. Exemple :
# 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 HTTPS appelables
Lorsque vous appelez des fonctions appelables HTTPS localement, vous devez fournir des données de test appropriées.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
Vous pouvez éventuellement transmettre un Firebase-Instance-ID-token
comme deuxième paramètre. Il doit s'agir d'une chaîne.
# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})
L'émulation de context.auth
n'est actuellement pas disponible.
Appeler des fonctions Realtime Database
Lorsque vous exécutez des fonctions Realtime Database localement, vous devez fournir
des données de test appropriées. Cela signifie généralement fournir de nouvelles données de test pour les opérations onCreate
, de vieilles données/des données supprimées pour les opérations onDelete
, et les deux pour les fonctions onUpdate
ou 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' })
En plus des options before/after
, le shell fournit le params
à utiliser dans la simulation de caractères génériques dans un chemin d'accès:
# 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 plutôt l'option auth
pour exécuter les fonctions en tant que
utilisateur final 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 des fonctions Firestore
Lorsque vous exécutez des fonctions Firestore en local, vous devez fournir
des données de test appropriées. Cela signifie généralement fournir de nouvelles données de test pour les opérations onCreate
, de vieilles données/données supprimées pour les opérations onDelete
, et les deux pour les fonctions onUpdate
ou onWrite
. Notez que les données Firestore doivent être
des paires clé-valeur. consultez la page Types de données acceptés.
# 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 champs before/after
de l'objet data
, vous pouvez utiliser les champs params
de l'objet options
pour simuler des caractères génériques 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 droits d'administrateur, ce qui signifie qu'il simule un événement de création/mise à jour/suppression comme s'il était effectué par un utilisateur administrateur.
Appeler des fonctions Pub/Sub
Pour les fonctions Pub/Sub, insérez la charge utile de votre message dans une instance Buffer
et
Ajoutez des attributs de données facultatifs, comme indiqué ci-dessous:
// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})
Appeler des fonctions Analytics
Vous pouvez appeler une fonction Analytics sans données en exécutant myAnalyticsFunction()
dans le shell.
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: {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);
Appeler les fonctions Storage et Auth
Pour les fonctions Storage et Auth, appelez la fonction locale avec la 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 :
- Pour Cloud Storage:
ObjectMetadata
- Pour Authentication :
UserRecord
Spécifiez uniquement les champs dont dépend votre code, ou n'indiquez aucun champ si vous ne vous voulez exécuter la fonction.