Cloud Functions kabuğu, işlevleri test verileriyle çağırmak için etkileşimli bir kabuk sağlar. Kabuk, tüm tetikleyici türlerini destekler.
Yönetici kimlik bilgilerini ayarlama (isteğe bağlı)
İşlev testlerinizin Firebase Admin SDK aracılığıyla Google API'leri veya diğer Firebase API'leriyle etkileşim kurması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 ve FCM gibi Firebase API'leri veya Cloud Translation ya da Cloud Speech gibi Google API'leri de dahil olmak üzere diğer tüm API'ler için bu bölümde açıklanan kurulum adımları gereklidir. Bu, Cloud Functions kabuğunu veya
firebase emulators:start
'yi kullanıyor olmanıza bakılmaksızın geçerlidir.
Emüle edilen işlevler için yönetici kimlik bilgilerini ayarlamak üzere:
- Google Cloud konsolunun Hizmet Hesapları bölmesini açın.
- App Engine varsayılan hizmet hesabı'nın seçildiğinden emin olun ve sağdaki seçenekler menüsünü kullanarak Anahtar oluştur'u seçin.
- İstendiğinde anahtar türü olarak JSON'u seçin ve Oluştur'u tıklayın.
Google varsayılan 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'yı kullanarak Firebase ve Google API'lerine erişebilir. Örneğin, bir Authentication tetikleyici test edilirken emüle edilen işlev admin.auth().getUserByEmail(email)
işlevini çağırabilir.
Cloud Functions kabuğunu kullanarak işlevlere hizmet verme
Cloud Functions kabuğu, işlevleri test verileriyle çağırmak için etkileşimli bir kabukla tüm işlev tetikleyici türlerini taklit eder. Seçenekler işlev türüne göre değişir ancak temel kullanım biçimi şöyledir:
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 onunla bir işlev çağırarak yerel dosyadan test verileri 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ı ise en az 0.6.2 sürümüne sahip olmalıdır. 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şlev yapılandırma değişkenleri kullanıyorsanız önce yerel ortamınızda özel yapılandırmanızı almak için komutu çalıştırın (bunu functions
dizininde ç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, aşağıdaki komutla kabuğu ç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 taklit etmek istediğiniz işlevin adını kullanın. Örneğin:
# 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 ile çağrılabilen işlevleri çağırma
HTTPS ile çağrılabilir işlevleri yerel olarak çağırırken uygun test verileri sağlamanız gerekir.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
İsteğe bağlı olarak, ikinci parametre olarak bir Firebase-Instance-ID-token
iletebilirsiniz. Bu değer 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 verileri sağlamanız gerekir. Bu genellikle onCreate
işlemleri için yeni test verileri, onDelete
işlemleri için eski/kaldırılmış veriler ve onUpdate
veya onWrite
işlevleri için her ikisinin de 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 yoldaki joker karakterleri taklit etmek için params
seçeneğini de 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 Realtime Database işlevlerini yönetici (hizmet hesabı) ayrıcalıklarıyla çalıştırır. Bunun yerine işlevleri belirli bir son kullanıcı veya kimliği doğrulanmamış bir 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 verileri sağlamanız gerekir. Bu genellikle onCreate
işlemleri için yeni test verileri, onDelete
işlemleri için eski/kaldırılmış veriler, onUpdate
veya onWrite
işlevleri için ise her ikisinin de sağlanması anlamına gelir. Firestore verilerinin anahtar/değer çiftleri olması gerektiğini unutmayın. Desteklenen Veri Türleri başlıklı makaleyi 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’} })
data
nesnesinin before/after
alanlarına ek olarak, bir doküman adındaki joker karakterleri taklit etmek için 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. Bu nedenle, oluşturma/güncelleme/silme etkinliğini, yönetici kullanıcı tarafından yapılmış gibi taklit eder.
PubSub işlevlerini çağırma
PubSub işlevleri için ileti yükünüzü bir Buffer
örneğine ekleyin ve isteğe bağlı olarak veri özelliklerini gösterildiği gibi 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()
komutunu çalıştırarak bir Analytics işlevini verisiz olarak çağırabilirsiniz.
İşlevi test verileriyle çalıştırmak için 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 yerel işlevi, işlevin içinde görmek istediğiniz test verileriyle çağırın. Test verileriniz, ilgili veri biçimlerine uygun olmalıdır:
- Cloud Storage için:
ObjectMetadata
- Authentication için:
UserRecord
Yalnızca kodunuzun bağlı olduğu alanları veya işlevi çalıştırmak istiyorsanız hiçbir alanı belirtmeyin.