İşlevleri etkileşimli olarak test etme

Cloud Functions kabuğu, çağırma işlemi için etkileşimli bir kabuk sağlar. fonksiyonlarının test edilmesini sağlar. Kabuk, tüm tetikleyici türlerini destekler.

Yönetici kimlik bilgilerini ayarlayın (isteğe bağlı)

İşlevler testlerinizin, Google API'leri veya diğer Firebase ile etkileşime girmesini istiyorsanız Firebase Admin SDK'sı aracılığıyla API'leri ayarlamak için yönetici kimlik bilgileri.

  • Cloud Firestore ve Realtime Database tetikleyicileri zaten yeterli sayıda kimlik bilgisine sahiptir ve ek kurulum gerektirmez.
  • Authentication ve FCM gibi Firebase API'leri 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, Cloud Functions kabuğunu veya firebase emulators:start kabuğunu kullanmanızdan bağımsız olarak geçerlidir.

Emüle edilen işlevler için yönetici kimlik bilgilerini ayarlamak üzere:

  1. Şunu açın: Hizmet Hesapları bölmesi Google Cloud konsolunda görebilirsiniz.
  2. App Engine varsayılan hizmet hesabının seçili olduğundan emin olun ve şunu kullanın: Anahtar oluştur'u seçmek için sağdaki seçenekler menüsünü tıklayın.
  3. İstendiğinde, anahtar türü olarak JSON'yi seçip Oluştur'u tıklayın.
  4. 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 Firebase'e ve Admin SDK'sını kullanan Google API'leri Örneğin, Authentication tetikleyicisi ise emüle edilen işlev admin.auth().getUserByEmail(email).

İşlevleri Cloud Functions kabuğu kullanarak sunma

Cloud Functions kabuğu, her tür işlev tetikleyicisi türünü işlevlerin test verileriyle çağrılmasına olanak tanıyan etkileşimli kabuk. Seçenekler değişiklik gösterir temel kullanım biçimi şu şekildedir:

myFunctionName(data, options)

data parametresi; Realtime Database, Cloud Firestore ve ve PubSub tetikleyicileri, 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 için geçerlidir Cloud Firestore işlevlerine dahildir.

İsteğe bağlı olarak, test verilerini yerel bir dosyasını değişken olarak kaydedip bir işlev çağırarak dosyayı aşağıdaki gibi değiştirin:

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 sahip olmalı ve firebase-functions SDK'sının en az 0.6.2 sürümü 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 komutuna ekleyerek (bunu functions dizininde çalıştırın) yerel ortamınızda:

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ü, ancak değiştirin request öğesine emüle etmek istediğiniz işlevin adını yazı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 ç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 şu bilgileri sağlamanız gerekir: uygun test verileri. Bu genellikle, yeni test verileri sunmak anlamına gelir. onCreate işlemleri, onDelete işlemlerine ait eski/kaldırılmış veriler ve her ikisi için de onUpdate veya onWrite işlevleri:

# 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 params öğesini de sağlar. bir yoldaki sahte joker karakterlerde kullanım seçeneği:

# 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ı) ile çalıştırır. ayrıcalıkları. İşlevleri belirli bir öğe olarak çalıştırmak için auth seçeneğini kullanın. son kullanıcı olarak veya kimliği doğrulanmamış bir kullanıcı olarak:

# 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. Bu genellikle, yeni test verileri sunmak anlamına gelir. onCreate işlemleri, onDelete işlemlerine ait eski/kaldırılmış veriler ve her ikisi için de onUpdate veya onWrite işlevleri. Firestore verilerinin iyi olması ve anahtar/değer çiftleri; 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’} })

data nesnesinin before/after alanlarına ek olarak, model oluşturmak için options nesnesindeki params alanlarını kullanabilirsiniz doküman adındaki joker karakterler:

# 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. bir oluşturma/güncelleme/silme etkinliği ile sanki bir kullanıcı tarafından yapılmış gibi taklit yönetici kullanıcı.

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 veri özelliklerini aşağıda 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

Bir Analytics işlevini herhangi bir veri olmadan şu şekilde çağırabilirsiniz: myAnalyticsFunction() çalıştırmanız gerekir. İşlevi test verileriyle çalıştırmak amacıyla fonksiyonunuzun ihtiyaç duyduğu belirli etkinlik verisi alanları:

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 fonksiyonun içinde görmek istediğiniz verileri test edin. Test verileriniz ilgili veri biçimlerini kullanın:

Yalnızca kodunuzun bağlı olduğu alanları belirtin veya yalnızca fonksiyonunu çalıştırmak istiyorsunuz.