Powłoka Cloud Functions zapewnia interaktywną powłokę do wywoływania funkcji z danymi testowymi. Powłoka obsługuje wszystkie typy wyzwalaczy.
Skonfiguruj dane logowania administratora (opcjonalnie)
Jeśli chcesz, aby testy funkcji współdziałały z interfejsami API Google lub innymi interfejsami API Firebase za pośrednictwem pakietu Firebase Admin SDK , konieczne może być skonfigurowanie danych logowania administratora.
- Wyzwalacze Cloud Firestore i Realtime Database mają już wystarczające dane logowania i nie wymagają dodatkowej konfiguracji.
- Wszystkie inne interfejsy API, w tym interfejsy API Firebase, takie jak uwierzytelnianie i FCM lub interfejsy Google, takie jak Cloud Translation lub Cloud Speech, wymagają czynności konfiguracyjnych opisanych w tej sekcji. Dotyczy to zarówno powłoki Cloud Functions, jak i
firebase emulators:start
.
Aby skonfigurować poświadczenia administratora dla emulowanych funkcji:
- Otwórz panel Konta usług w Google Cloud Console.
- Upewnij się, że wybrane jest domyślne konto usługi App Engine , i użyj menu opcji po prawej stronie, aby wybrać Utwórz klucz .
- Po wyświetleniu monitu wybierz JSON jako typ klucza i kliknij Utwórz .
Ustaw domyślne dane logowania Google tak, aby wskazywały pobrany klucz:
Uniksa
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase functions:shell
Okna
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase functions:shell
Po wykonaniu tych czynności Twoje testy funkcji będą mogły uzyskiwać dostęp do interfejsów API Firebase i Google za pomocą pakietu Admin SDK . Na przykład podczas testowania wyzwalacza uwierzytelniania emulowana funkcja może wywołać admin.auth().getUserByEmail(email)
.
Udostępniaj funkcje za pomocą powłoki Cloud Functions
Powłoka Cloud Functions emuluje wszystkie typy wyzwalaczy 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 to:
myFunctionName(data, options)
Parametr data
jest wymagany w przypadku wyzwalaczy Bazy danych czasu rzeczywistego, Cloud Firestore i PubSub oraz opcjonalny dla wszystkich innych typów funkcji. Ponadto opcjonalny parametr options
jest prawidłowy tylko dla funkcji Bazy danych czasu rzeczywistego i Cloud Firestore.
Opcjonalnie możesz załadować dane testowe z pliku lokalnego, zapisując plik jako zmienną i wywołując z nim funkcję:
var data = require('./path/to/testData.json');
myFunction(data);
Zainstaluj i skonfiguruj powłokę Cloud Functions
Aby korzystać z tej funkcji, firebase-tools
muszą mieć wersję co najmniej 3.11.0, a pakiet SDK firebase-functions
musi mieć wersję co najmniej 0.6.2. Aby zaktualizować oba, uruchom następujące polecenia w katalogu functions/
Twojego projektu:
npm install --save firebase-functions@latest
npm install -g firebase-tools
Jeśli używasz niestandardowych zmiennych konfiguracyjnych funkcji, najpierw uruchom polecenie, aby uzyskać niestandardową konfigurację (uruchom to w katalogu functions
) w środowisku lokalnym:
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ę za pomocą następującego polecenia:
firebase functions:shell
Wywołaj funkcje HTTPS
W przypadku wywoływania funkcji HTTPS w powłoce użycie jest takie samo, jak modułu request
NPM, ale zastąp request
nazwą funkcji, którą chcesz emulować. Na 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łaj funkcje wywoływane HTTPS
Podczas lokalnego wywoływania funkcji HTTPS musisz podać odpowiednie dane testowe.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
Opcjonalnie możesz przekazać Firebase-Instance-ID-token
jako drugi parametr. To musi być ciąg.
# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})
Emulacja context.auth
jest obecnie niedostępna.
Wywołaj funkcje bazy danych czasu rzeczywistego
Uruchamiając lokalnie funkcje Bazy danych czasu rzeczywistego, musisz podać odpowiednie dane testowe. Ogólnie oznacza to dostarczenie nowych danych testowych dla operacji onCreate
, starych/usuniętych danych dla operacji onDelete
, a także dla 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
, której można użyć do wyśmiewania 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 uruchamia funkcje Bazy danych czasu rzeczywistego z uprawnieniami administratora (konta usługi). Użyj opcji auth
, aby zamiast tego uruchamiać funkcje jako określony użytkownik końcowy lub jako użytkownik nieuwierzytelniony:
# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})
Wywołaj funkcje Firestore
Uruchamiając funkcje Firestore lokalnie, musisz podać odpowiednie dane testowe. Ogólnie oznacza to dostarczenie nowych danych testowych dla operacji onCreate
, starych/usuniętych danych dla operacji onDelete
, a także dla funkcji onUpdate
i onWrite
. Pamiętaj, że dane Firestore muszą być parami klucz-wartość; zobacz 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żyć pól params
w obiekcie options
, aby zaszyfrować symbole wieloznaczne 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 uruchamia funkcje Firestore z uprawnieniami administratora, co oznacza, że naśladuje zdarzenie tworzenia/aktualizacji/usuwania, tak jakby zostało to wykonane przez użytkownika administracyjnego.
Wywołaj funkcje PubSub
W przypadku funkcji PubSub wstaw ładunek wiadomości do instancji Buffer
i opcjonalnie dodaj atrybuty danych, jak pokazano:
// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})
Wywołaj funkcje analityczne
Funkcję Analytics można wywołać bez żadnych danych, uruchamiając w myAnalyticsFunction()
. Aby uruchomić funkcję z danymi testowymi, zaleca się zdefiniowanie zmiennej dla określonych pól danych zdarzenia, których potrzebuje Twoja funkcja:
var data = {
eventDim: [{
// populates event.data.params
params:{foo:'bar'},
// 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łaj funkcje przechowywania i uwierzytelniania
W przypadku funkcji Storage i Auth wywołaj funkcję lokalną z danymi testowymi, które chcesz wyświetlić wewnątrz funkcji. Twoje dane testowe muszą być zgodne z odpowiednimi formatami danych:
- W przypadku przechowywania w chmurze:
ObjectMetadata
- Do uwierzytelniania:
UserRecord
Określ tylko pola, od których zależy Twój kod, lub wcale, jeśli chcesz tylko uruchomić funkcję.