Cloud Functions kabuğu, test verileriyle işlevlerin çağrılması için etkileşimli bir kabuk sağlar. Kabuk, tüm tetikleyici türlerini destekler.
Yönetici kimlik bilgilerini ayarlayın (isteğe bağlı)
İşlevler testlerinizin, Firebase Admin SDK'sı aracılığıyla Google API'leri veya diğer Firebase API'leriyle etkileşimde bulunmasını istiyorsanız yönetici kimlik bilgilerini ayarlamanız gerekebilir.
- Cloud Firestore ve Realtime Database tetikleyicileri zaten yeterli kimlik bilgilerine sahiptir ve ek kurulum gerektirmez.
- Authentication gibi Firebase API'leri ve FCM veya Cloud Translation ya da Cloud Speech gibi Google API'leri dahil olmak üzere diğer tüm API'ler için bu bölümde açıklanan kurulum adımlarının uygulanması gerekir. Bu durum, ister Cloud Functions kabuğunu ister
firebase emulators:start
kabuğunu kullanın.
Emüle edilen işlevler için yönetici kimlik bilgilerini ayarlamak üzere:
- Google Cloud Console'un Hizmet Hesapları bölmesini açın.
- App Engine varsayılan hizmet hesabı seçeneğinin belirlendiğinden emin olun ve Anahtar oluştur'u seçmek için sağdaki seçenekler menüsünü kullanın.
- İstendiğinde, anahtar türü olarak JSON'yi seçip Oluştur'u tıklayın.
Varsayılan Google kimlik bilgilerinizi, indirilen anahtarı işaret edecek şekilde ayarlayın:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase functions:shell
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase functions:shell
Bu adımları tamamladıktan sonra işlev testleriniz, Admin SDK'sını kullanarak Firebase ve Google API'lerine erişebilir. Örneğin, bir kimlik doğrulama tetikleyicisini test ederken emüle edilen işlev, admin.auth().getUserByEmail(email)
öğesini çağırabilir.
İşlevleri Cloud Functions kabuğu kullanarak sunma
Cloud Functions kabuğu, işlevlerin test verileriyle çağrılması için etkileşimli bir kabuğa sahip her tür işlev tetikleyicisinin emülasyonunu yapar. Seçenekler işlev türüne göre değişir, ancak temel kullanım biçimi şu şekildedir:
myFunctionName(data, options)
data
parametresi Realtime Database, Cloud Firestore ve PubSub tetikleyicileri için zorunlu, diğer tüm işlev türleri için isteğe bağlıdır.
Ayrıca isteğe bağlı options
parametresi yalnızca Realtime Database ve Cloud Firestore işlevleri için geçerlidir.
İsteğe bağlı olarak, dosyayı değişken olarak kaydedip bir işlev çağırarak test verilerini yerel bir dosyadan yükleyebilirsiniz:
var data = require('./path/to/testData.json');
myFunction(data);
Cloud Functions kabuğunu yükleme ve yapılandırma
Bu özelliği kullanmak için firebase-tools
en az 3.11.0 sürümüne, firebase-functions
SDK'sının ise en az 0.6.2 sürümüne sahip olması gerekir. Her ikisini de güncellemek için projenizin functions/
dizininde aşağıdaki komutları çalıştırın:
npm install --save firebase-functions@latest
npm install -g firebase-tools
Özel işlevler yapılandırma değişkenleri kullanıyorsanız önce özel yapılandırmanızı yerel ortamınızda almak için komutu çalıştırın (bunu functions
dizininden çalıştırın):
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
Son olarak, kabuğu aşağıdaki komutla çalıştırın:
firebase functions:shell
HTTPS işlevlerini çağırma
Kabukta HTTPS işlevlerini çağırmak için kullanım request
NPM modülüyle aynıdır ancak request
yerine emüle etmek istediğiniz işlevin adını girin. Örnek:
# 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 çağrılabilir işlevlerini çağırma
HTTPS Çağırılabilir işlevlerini yerel olarak çağırırken uygun test verilerini sağlamanız gerekir.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
İsteğe bağlı olarak, ikinci parametre olarak bir Firebase-Instance-ID-token
aktarabilirsiniz. Bu bir dize olmalıdır.
# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})
context.auth
emülasyonu şu anda kullanılamıyor.
Realtime Database işlevlerini çağırma
Realtime Database işlevlerini yerel olarak çalıştırırken uygun test verilerini sağlamanız gerekir. Bu genellikle onCreate
işlemleri, eski/kaldırılmış onDelete
işlemleri ve hem onUpdate
hem de onWrite
işlevleri için yeni test verilerinin sağlanması anlamına gelir:
# invoke onCreate function
myDatabaseFunction('new_data')
# invoke onDelete function
myDatabaseFunction('old_data')
# invoke onUpdate or onWrite function
myDatabaseFunction({before: 'old_data', after: 'new_data' })
Kabuk, before/after
seçeneklerine ek olarak, bir yoldaki sahte joker karakterlerde kullanmak için params
seçeneği sunar:
# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})
Kabuk, varsayılan olarak yönetici (hizmet hesabı) ayrıcalıklarıyla Realtime Database işlevlerini çalıştırır. Bunun yerine, işlevleri belirli bir son kullanıcı veya kimliği doğrulanmamış kullanıcı olarak çalıştırmak için auth
seçeneğini kullanın:
# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})
Firestore işlevlerini çağırma
Firestore işlevlerini yerel olarak çalıştırırken uygun test verilerini sağlamanız gerekir. Bu genellikle onCreate
işlemleri, eski/kaldırılmış onDelete
işlemleri ve hem onUpdate
hem de onWrite
işlevleri için yeni test verilerinin sağlanması anlamına gelir. Firestore verilerinin anahtar/değer çiftleri olması gerektiğini unutmayın. Desteklenen Veri Türleri bölümünü inceleyin.
# invoke onCreate function
myFirestoreFunction({foo: ‘new’})
# invoke onDelete function
myFirestoreFunction({foo: ‘old’})
# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })
Bir doküman adında joker karakterlerle deneme yapmak için, data
nesnesinin before/after
alanlarına ek olarak options
nesnesindeki params
alanlarını kullanabilirsiniz:
# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})
Kabuk, Firestore işlevlerini her zaman yönetici ayrıcalıklarıyla çalıştırır. Yani, oluşturma/güncelleme/silme etkinliği, bir yönetici kullanıcı tarafından gerçekleştirilmiş gibi taklit edilir.
PubSub işlevlerini çağırma
PubSub işlevleri için mesaj yükünüzü bir Buffer
örneğine ekleyin ve isteğe bağlı olarak aşağıdaki veri özelliklerini ekleyin:
// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})
Analytics işlevlerini çağırma
Kabukta myAnalyticsFunction()
çalıştırarak Analytics işlevlerini herhangi bir veri olmadan çağırabilirsiniz.
İşlevi test verileriyle çalıştırmak amacıyla, işlevinizin ihtiyaç duyduğu belirli etkinlik verisi alanları için bir değişken tanımlamanız önerilir:
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 ve Auth işlevlerini çağırma
Storage ve Auth işlevleri için, işlevin içinde görmek istediğiniz test verileriyle yerel işlevi çağırın. Test verileriniz ilgili veri biçimlerine uygun olmalıdır:
- Cloud Storage için:
ObjectMetadata
- Kimlik doğrulama için:
UserRecord
Yalnızca kodunuzun bağlı olduğu alanları belirtin veya yalnızca işlevi çalıştırmak istiyorsanız hiçbir alan belirtmeyin.