Funktionen interaktiv testen

Die Cloud Functions-Shell bietet eine interaktive Shell zum Aufrufen von Funktionen mit Testdaten. Die Shell unterstützt alle Triggertypen.

Administrator-Anmeldedaten einrichten (optional)

Wenn Sie möchten, dass Ihre Funktionstests über das Firebase Admin SDK mit Google APIs oder anderen Firebase APIs interagieren, müssen Sie möglicherweise Administratoranmeldedaten einrichten.

  • Die Trigger Cloud Firestore und Realtime Database 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:start verwenden.

So richten Sie Administrator-Anmeldedaten für emulierte Funktionen ein:

  1. Öffnen Sie in der Google Cloud-Konsole den Bereich Dienstkonten.
  2. Achten Sie darauf, dass das Standarddienstkonto für App Engine ausgewählt ist, und wählen Sie im Optionsmenü rechts Schlüssel erstellen aus.
  3. Wählen Sie bei Aufforderung JSON als Schlüsseltyp aus und klicken Sie auf Erstellen.
  4. 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
    

Nachdem Sie diese Schritte ausgeführt haben, können Ihre Funktionstests über das Admin SDK auf Firebase und Google APIs zugreifen. Wenn Sie beispielsweise einen Authentication-Trigger testen, kann die emulierte Funktion 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, um die Funktionen mit Testdaten aufzurufen. Die Optionen variieren je nach Funktionstyp. Das grundlegende Nutzungsformat ist jedoch:

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. Der optionale Parameter options ist 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 die Version 3.11.0 und das firebase-functions SDK mindestens die Version 0.6.2 haben. Führen Sie die folgenden Befehle im Verzeichnis functions/ Ihres Projekts aus, um beide zu aktualisieren:

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 Ihre benutzerdefinierte Konfiguration in Ihrer lokalen Umgebung abzurufen (führen Sie diesen 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 die Shell mit dem folgenden Befehl aus:

firebase functions:shell

HTTPS-Funktionen aufrufen

Das Aufrufen von HTTPS-Funktionen in der Shell funktioniert genauso wie 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' })

Aufrufbare HTTPS-Funktionen aufrufen

Wenn Sie aufrufbare HTTPS-Funktionen lokal aufrufen, müssen Sie entsprechende Testdaten angeben.

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

Optional können Sie als zweiten Parameter einen Firebase-Instance-ID-token ü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 bereitstellen. In der Regel bedeutet dies, dass neue Testdaten für onCreate-Vorgänge, alte/entfernte Daten für onDelete-Vorgänge und beides für onUpdate- oder onWrite-Funktionen bereitgestellt werden:

# 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, mit der Platzhalter in einem Pfad simuliert werden können:

# 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 Administratorberechtigungen (Dienstkonto) aus. 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 entsprechende Testdaten bereitstellen. In der Regel bedeutet dies, dass neue Testdaten für onCreate-Vorgänge, alte/entfernte Daten für onDelete-Vorgänge und beides für onUpdate- oder onWrite-Funktionen bereitgestellt werden müssen. Beachten Sie, dass Firestore-Daten Schlüssel/Wert-Paare sein müssen. 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 before/after-Feldern des data-Objekts können Sie die params-Felder des options-Objekts 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 Erstellungs-, Aktualisierungs- oder Löschereignis so simuliert wird, als wäre es von einem Nutzer mit Administratorzugriff ausgeführt worden.

Pub/Sub-Funktionen aufrufen

Fügen Sie bei Pub/Sub-Funktionen die Nachrichtennutzlast in eine Buffer-Instanz ein und fügen Sie optional Datenattribute hinzu, 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 spezifischen Ereignisdatenfelder 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 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:

Geben Sie nur die Felder an, von denen Ihr Code abhängt, oder gar keine, wenn Sie nur die Funktion ausführen möchten.