Die Cloud Functions-Shell bietet eine interaktive Shell zum Aufrufen von mit Testdaten. Die Shell unterstützt alle Triggertypen.
Administratoranmeldedaten einrichten (optional)
Wenn Ihre Funktionstests mit Google APIs oder anderen Firebase-Projekten interagieren sollen APIs über das Firebase Admin SDK verwenden, müssen Sie möglicherweise Administratoranmeldedaten.
- Cloud Firestore- und Realtime Database-Trigger verfügen bereits über 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:start
verwenden.
So richten Sie Administratoranmeldedaten für emulierte Funktionen ein:
- Öffnen Sie das Bereich „Dienstkonten“ der Google Cloud-Konsole.
- Achten Sie darauf, dass App Engine-Standarddienstkonto ausgewählt ist, und verwenden Sie das Optionsmenü rechts und wählen Sie Schlüssel erstellen aus.
- Wenn Sie dazu aufgefordert werden, wählen Sie als Schlüsseltyp JSON aus und klicken Sie auf Erstellen.
Legen Sie Ihre 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 auf Firebase zugreifen und
Google APIs, die das Admin SDK verwenden 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, über die die Funktionen mit Testdaten aufgerufen werden können. Optionen variieren nach Funktionstyp sortiert. Das grundlegende Verwendungsformat ist jedoch:
myFunctionName(data, options)
Der Parameter data
ist für Realtime Database, Cloud Firestore,
und PubSub-Trigger und optional für alle anderen Funktionstypen.
Außerdem ist der optionale Parameter options
nur für Realtime Database gültig.
und Cloud Firestore-Funktionen.
Optional können Sie Testdaten von einer lokalen indem Sie die Datei als Variable speichern und damit eine Funktion aufrufen:
var data = require('./path/to/testData.json');
myFunction(data);
Cloud Functions-Shell installieren und konfigurieren
Für die Verwendung dieser Funktion muss firebase-tools
mindestens Version 3.11.0 und das firebase-functions
SDK mindestens Version 0.6.2 haben. Um beide zu aktualisieren,
Führen Sie die folgenden Befehle im Verzeichnis functions/
Ihres Projekts aus:
npm install --save firebase-functions@latest
npm install -g firebase-tools
Wenn Sie Konfigurationsvariablen für benutzerdefinierte Funktionen verwenden, führen Sie zuerst den Befehl aus, um die benutzerdefinierte Konfiguration in Ihrer lokalen Umgebung abzurufen (führen Sie ihn 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
Für das Aufrufen von HTTPS-Funktionen in der Shell gilt dieselbe Verwendung wie für das NPM-Modul request
. Ersetzen Sie jedoch request
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' })
HTTPS-Callable-Funktionen aufrufen
Wenn Sie HTTPS Callable-Funktionen lokal aufrufen, müssen Sie entsprechende Testdaten bereitstellen.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
Optional können Sie 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 entsprechende Testdaten angeben. Das bedeutet im Allgemeinen, neue Testdaten für
onCreate
Vorgänge, alte/entfernte Daten für onDelete
Vorgänge und beide für
onUpdate
- oder onWrite
-Funktionen:
# 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 before/after
-Optionen 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 führt die Shell Realtime Database-Funktionen mit Administrator (Dienstkonto) aus
Berechtigungen. Verwenden Sie die Option auth
, um Funktionen stattdessen als ein bestimmtes
oder als nicht authentifizierter Nutzer:
# 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 entsprechende Testdaten angeben. Das bedeutet im Allgemeinen, neue Testdaten für
onCreate
Vorgänge, alte/entfernte Daten für onDelete
Vorgänge und beide für
onUpdate
- oder onWrite
-Funktionen. Die Firestore-Daten müssen
Schlüssel/Wert-Paare; Siehe 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 before/after
-Feldern des data
-Objekts
können Sie die params
-Felder für das options
-Objekt verwenden, um
Platzhalter in einem Dokumentnamen:
# 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 immer Firestore-Funktionen mit Administratorberechtigungen aus, die ein Erstellen/Aktualisieren/Löschen-Ereignis wird so simuliert, als ob es von einem Nutzer mit Administratorzugriff.
Pub/Sub-Funktionen aufrufen
Fügen Sie für Pub/Sub-Funktionen die Nachrichtennutzlast in eine Buffer
-Instanz ein und
können Sie optionale Datenattribute hinzufügen, wie hier 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, sollten Sie eine Variable für die Ereignisdatenfelder definieren, die für Ihre Funktion erforderlich sind:
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 Auth-Funktionen aufrufen
Rufen Sie für Storage- und Auth-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 keine, wenn Sie nur die Funktion ausführen möchten.