Powłoka Cloud Functions udostępnia interaktywną powłokę do wywoływania funkcji z danymi testowymi. Powłoka obsługuje wszystkie typy aktywatorów.
Konfiguracja danych logowania administratora (opcjonalnie)
Jeśli chcesz, aby testy funkcji mogły wchodzić w interakcję z usługami Google API lub innymi usługami Firebase za pomocą pakietu SDK Firebase Admin, konieczne może być skonfigurowanie danych logowania administratora.
- Reguły Cloud Firestore i Realtime Database mają już wystarczające dane logowania i nie wymagają dodatkowej konfiguracji.
- Wszystkie inne interfejsy API, w tym interfejsy Firebase API, takie jak Authentication i FCM czy interfejsy API Google, takie jak Cloud Translation czy Cloud Speech, wymagają wykonania czynności konfiguracyjnych opisanych w tej sekcji. Ma to zastosowanie niezależnie od tego, czy używasz powłoki Cloud Functions, czy
firebase emulators:start
.
Aby skonfigurować dane logowania administratora dla funkcji emulowanych:
- Otwórz panel Konta usługi w konsoli Google Cloud.
- Upewnij się, że wybrane jest App Engine domyślne konto usługi, a potem w menu opcji po prawej stronie kliknij Utwórz klucz.
- Gdy pojawi się odpowiedni komunikat, wybierz typ klucza JSON i kliknij Utwórz.
Ustaw domyślne dane logowania Google tak, aby wskazywały pobrany klucz:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase functions:shell
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase functions:shell
Gdy wykonasz te czynności, testy funkcji będą mogły uzyskać dostęp do interfejsów API Firebase i Google za pomocą pakietu Admin SDK. Podczas testowania np. Authentication, emulowana funkcja może wywołać admin.auth().getUserByEmail(email)
.
Przetwarzanie funkcji za pomocą powłoki Cloud Functions
Powłoka Cloud Functions emuluje wszystkie typy aktywatorów funkcji za pomocą interaktywnej powłoki do wywoływania funkcji z danymi testowymi. Opcje różnią się w zależności od typu funkcji, ale podstawowy format użycia jest taki:
myFunctionName(data, options)
Parametr data
jest wymagany w przypadku wyzwalaczy Realtime Database, Cloud Firestore i PubSub, a opcjonalny w przypadku wszystkich innych typów funkcji.
Opcjonalny parametr options
jest prawidłowy tylko w przypadku funkcji Bazy danych czasu rzeczywistego i Cloud Firestore.
Opcjonalnie możesz wczytać dane testowe z lokalnego pliku, zapisując go jako zmienną i wywołując funkcję:
var data = require('./path/to/testData.json');
myFunction(data);
Instalowanie i konfigurowanie powłoki Cloud Functions
Aby korzystać z tej funkcji, musisz mieć pakiet SDK firebase-tools
w wersji co najmniej 3.11.0, a pakiet SDK firebase-functions
w wersji co najmniej 0.6.2. Aby zaktualizować obie wersje, uruchom te polecenia w katalogu functions/
projektu:
npm install --save firebase-functions@latest
npm install -g firebase-tools
Jeśli używasz zmiennych konfiguracji funkcji niestandardowych, najpierw uruchom w swoim środowisku lokalnym (w katalogu functions
) ten polecenie, aby uzyskać niestandardową konfigurację:
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
Na koniec uruchom powłokę tym poleceniem:
firebase functions:shell
Wywoływanie funkcji HTTPS
W przypadku wywoływania funkcji HTTPS w powłoce sposób użycia jest taki sam jak w module NPM request
, ale zamiast request
należy podać nazwę funkcji, którą chcesz emulować. Przykład:
# 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' })
Wywoływanie funkcji wywoływanych przez HTTPS
Aby wywoływać funkcje wywoływane przez HTTPS lokalnie, musisz podać odpowiednie dane testowe.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
Opcjonalnie jako drugi parametr możesz przekazać Firebase-Instance-ID-token
. Musi to być ciąg znaków.
# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})
Emulacja context.auth
jest obecnie niedostępna.
Wywoływanie funkcji bazy danych czasu rzeczywistego
Gdy uruchamiasz funkcje Bazy danych czasu rzeczywistego lokalnie, musisz udostępnić odpowiednie dane testowe. Oznacza to zazwyczaj dostarczenie nowych danych testowych w przypadku operacji onCreate
, starych lub usuniętych danych w przypadku operacji onDelete
oraz obu tych rodzajów danych w przypadku funkcji onUpdate
lub 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' })
Oprócz opcji before/after
powłoka udostępnia opcję params
do tworzenia symboli wieloznacznych w ścieżce:
# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})
Domyślnie powłoka wykonuje funkcje Realtime Database z uprawnieniami administratora (konto usługi). Użyj opcji auth
, aby zamiast tego uruchomić funkcje jako konkretny użytkownik końcowy lub niezalogowany użytkownik:
# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})
Wywoływanie funkcji Firestore
Gdy uruchamiasz funkcje Firestore lokalnie, musisz udostępnić odpowiednie dane testowe. Oznacza to zazwyczaj dostarczenie nowych danych testowych do operacji onCreate
, starych lub usuniętych danych do operacji onDelete
oraz obu tych typów danych do funkcji onUpdate
lub onWrite
. Pamiętaj, że dane Firestore muszą być parami klucz-wartość. Więcej informacji znajdziesz w artykule Obsługiwane typy danych.
# invoke onCreate function
myFirestoreFunction({foo: ‘new’})
# invoke onDelete function
myFirestoreFunction({foo: ‘old’})
# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })
Oprócz pól before/after
obiektu data
możesz używać pól params
obiektu options
do emulowania symboli wieloznacznych w nazwie dokumentu:
# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})
Powłoka zawsze wykonuje funkcje Firestore z uprawnieniami administracyjnymi, co oznacza, że symuluje zdarzenie tworzenia, aktualizowania lub usuwania tak, jakby zostało wykonane przez użytkownika administracyjnego.
Wywoływanie funkcji PubSub
W przypadku funkcji Pub/Sub wstaw ładunek wiadomości do instancji Buffer
i opcjonalnie dodaj atrybuty danych w ten sposób:
// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})
Wywoływanie funkcji Analytics
Funkcję Analytics możesz wywołać bez żadnych danych, uruchamiając myAnalyticsFunction()
w powłoce.
Aby uruchomić funkcję z danymi testowymi, zalecamy zdefiniowanie zmiennej dla poszczególnych pól danych zdarzenia, których potrzebuje funkcja:
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);
Wywoływanie funkcji pamięci i uwierzytelniania
W przypadku funkcji przechowywania i uwierzytelniania wywołaj funkcję lokalną z danymi testowymi, które chcesz zobaczyć wewnątrz funkcji. Dane testowe muszą być zgodne z odpowiednimi formatami danych:
- Cloud Storage:
ObjectMetadata
- Authentication:
UserRecord
Wskaż tylko pola, od których zależy Twój kod, lub żadne, jeśli chcesz tylko uruchomić funkcję.