Die Cloud Functions-Shell bietet eine interaktive Shell zum Aufrufen von Funktionen mit Testdaten. Die Shell unterstützt alle Triggertypen.
Administratoranmeldedaten einrichten (optional)
Wenn Ihre Funktionstests über das Firebase Admin SDK mit Google APIs oder anderen Firebase APIs interagieren sollen, müssen Sie möglicherweise Administratoranmeldedaten einrichten.
- Cloud Firestore und Realtime Database Trigger haben bereits ausreichende Anmeldedaten und erfordern keine zusätzliche Einrichtung.
- Für alle anderen APIs, einschließlich Firebase APIs wie Authentication und FCM oder Google APIs wie Cloud Translation oder Cloud Speech, sind die in diesem Abschnitt beschriebenen Einrichtungsschritte erforderlich. Dies gilt unabhängig davon, ob Sie die Cloud Functions Shell oder
firebase emulators:startverwenden.
So richten Sie Administratoranmeldedaten für emulierte Funktionen ein :
- Öffnen Sie in der Google Cloud Console den Bereich „Dienstkonten“.
- Achten Sie darauf, dass App Engine Standarddienstkonto ausgewählt ist, und verwenden Sie das Optionsmenü rechts, um Schlüssel erstellen auszuwählen.
- Wählen Sie bei Aufforderung JSON als Schlüsseltyp aus und klicken Sie auf Erstellen.
Legen Sie die Google-Standardanmeldedaten so fest, dass sie auf den heruntergeladenen Schlüssel verweisen:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase functions:shell
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase functions:shell
Nach Abschluss dieser Schritte können Ihre Funktionstests mit dem Admin SDK auf Firebase- und
Google APIs zugreifen. Beim Testen
eines Authentication Triggers könnte die emulierte Funktion beispielsweise
admin.auth().getUserByEmail(email) aufrufen.
Funktionen mit einer Cloud Functions-Shell bereitstellen
Die Cloud Functions-Shell emuliert alle Arten von Funktionstriggern mit einer interaktiven Shell zum Aufrufen der Funktionen mit Testdaten. Die Optionen variieren je nach Funktionstyp, aber das grundlegende Nutzungsformat ist:
myFunctionName(data, options)
Der Parameter data ist für Realtime Database-, Cloud Firestore- und Pub/Sub-Trigger erforderlich und für alle anderen Funktionstypen optional.
Außerdem ist der optionale Parameter options nur für Realtime Database- und Cloud Firestore-Funktionen gültig.
Optional können Sie Testdaten aus einer lokalen Datei laden, indem Sie die Datei als Variable speichern und eine Funktion damit aufrufen:
var data = require('./path/to/testData.json');
myFunction(data);
Cloud Functions-Shell installieren und konfigurieren
Für diese Funktion muss firebase-tools mindestens Version 3.11.0 und das firebase-functions-SDK mindestens Version 0.6.2 haben. Führen Sie die folgenden Befehle im Verzeichnis functions/ für Ihr Projekt aus, um beide zu aktualisieren:
npm install --save firebase-functions@latest
npm install -g firebase-tools
Wenn Sie benutzerdefinierte Konfigurationsvariablen für Funktionen verwenden, führen Sie zuerst den Befehl aus, um Ihre benutzerdefinierte Konfiguration in Ihrer lokalen Umgebung abzurufen. Führen Sie diesen Befehl im Verzeichnis functions aus:
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
Führen Sie schließlich die Shell mit dem folgenden Befehl aus:
firebase functions:shell
HTTPS-Funktionen aufrufen
Zum Aufrufen von HTTPS-Funktionen in der Shell ist die Verwendung dieselbe wie beim
request-NPM-Modul. Ersetzen Sie
request jedoch durch den Namen der Funktion, die Sie emulieren möchten. Beispiel:
# 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' })
Aufrufbare HTTPS-Funktionen aufrufen
Wenn Sie aufrufbare HTTPS-Funktionen lokal aufrufen, müssen Sie geeignete Testdaten angeben.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
Optional können Sie ein Firebase-Instance-ID-token als zweiten Parameter übergeben. Dies muss ein String sein.
# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})
Die Emulation von context.auth ist derzeit nicht verfügbar.
Realtime Database-Funktionen aufrufen
Wenn Sie Realtime Database-Funktionen lokal ausführen, müssen Sie geeignete Testdaten angeben. Im Allgemeinen bedeutet das, dass Sie neue Testdaten für onCreate-Vorgänge, alte/entfernte Daten für onDelete-Vorgänge und beides für onUpdate- oder onWrite-Funktionen angeben müssen:
# invoke onCreate function
myDatabaseFunction('new_data')
# invoke onDelete function
myDatabaseFunction('old_data')
# invoke onUpdate or onWrite function
myDatabaseFunction({before: 'old_data', after: 'new_data' })
Zusätzlich zu den Optionen before/after bietet die Shell die Option params, um Platzhalter in einem Pfad zu simulieren:
# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})
Standardmäßig werden Realtime Database-Funktionen in der Shell mit Administratorberechtigungen (Dienstkonto) ausgeführt. Verwenden Sie die Option auth, um Funktionen stattdessen als bestimmter Endnutzer oder als nicht authentifizierter Nutzer auszuführen:
# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})
Firestore-Funktionen aufrufen
Wenn Sie Firestore-Funktionen lokal ausführen, müssen Sie geeignete Testdaten angeben. Im Allgemeinen bedeutet das, dass Sie neue Testdaten für onCreate-Vorgänge, alte/entfernte Daten für onDelete-Vorgänge und beides für onUpdate- oder onWrite-Funktionen angeben müssen. Firestore-Daten müssen
Schlüssel-Wert-Paare sein. Weitere Informationen finden Sie unter Unterstützte Datentypen.
# invoke onCreate function
myFirestoreFunction({foo: ‘new’})
# invoke onDelete function
myFirestoreFunction({foo: ‘old’})
# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })
Zusätzlich zu den Feldern before/after des Objekts data können Sie die Felder params des Objekts options verwenden, um Platzhalter in einem Dokumentnamen zu simulieren:
# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})
Die Shell führt Firestore-Funktionen immer mit Administratorberechtigungen aus. Das bedeutet, dass ein Ereignis zum Erstellen, Aktualisieren oder Löschen so simuliert wird, als wäre es von einem Administrator ausgeführt worden.
Pub/Sub-Funktionen aufrufen
Fügen Sie für Pub/Sub-Funktionen die Nachrichtennutzlast in eine Buffer-Instanz ein und fügen Sie optional Datenattribute hinzu, wie unten gezeigt:
// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})
Analytics-Funktionen aufrufen
Sie können eine Analytics-Funktion ohne Daten aufrufen, indem Sie myAnalyticsFunction() in der Shell ausführen.
Wenn Sie die Funktion mit Testdaten ausführen möchten, empfiehlt es sich, eine Variable für die spezifischen Ereignisdatenfelder zu definieren, die Ihre Funktion benötigt:
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);
Storage- und Authentication-Funktionen aufrufen
Rufen Sie für Storage- und Authentication-Funktionen die lokale Funktion mit den Testdaten auf, die Sie in der Funktion sehen möchten. Ihre Testdaten müssen den entsprechenden Datenformaten entsprechen:
- Für Cloud Storage:
ObjectMetadata - Für Authentication:
UserRecord
Geben Sie nur die Felder an, von denen Ihr Code abhängt, oder gar keine, wenn Sie nur die Funktion ausführen möchten.