Catch up on everthing we announced at this year's Firebase Summit. Learn more

İşlevleri etkileşimli olarak test edin

Cloud Functions kabuğu, test verileriyle işlevleri çağırmak için etkileşimli bir kabuk sağlar. Kabuk, tüm tetik türlerini destekler.

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

Eğer fonksiyon testleri aracılığıyla Google API'leri veya diğer Firebase API'leri ile etkileşim istiyorsanız Firebase Yönetici SDK , yönetici kimlik bilgilerini kurmak gerekebilir.

  • Bulut FireStore ve Gerçek Zamanlı Veri Tabanı tetikleyiciler zaten yeterli kimlik bilgilerine sahip ve ek kuruluma ihtiyaç yoktur.
  • Kimlik Doğrulama ve FCM gibi Firebase API'leri veya Cloud Translation veya Cloud Speech gibi Google API'leri dahil olmak üzere tüm diğer API'ler, bu bölümde açıklanan kurulum adımlarını gerektirir. Eğer fonksiyonlar kabuk veya kullanarak ister bu geçerlidir firebase emulators:start .

Öykünülmüş işlevler için yönetici kimlik bilgilerini ayarlamak için:

  1. Hizmet Hesapları bölmesini Google Bulut Konsolu.
  2. App Engine varsayılan hizmet hesabı seçili olduğundan emin olun ve anahtar oluşturun seçmek için sağdaki seçenekler menüsünü kullanın.
  3. İstendiğinde, anahtar türü için JSON seçin ve Oluştur'u tıklayın.
  4. 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
    

    pencereler

    $ set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    
    $ firebase functions:shell
    

Bu adımları tamamladıktan sonra, fonksiyonları testleri kullanılarak Firebase ve Google API'leri erişebilir Yönetici SDK'yı . Bir Doğrulama tetiği test ederken Örneğin, taklit fonksiyonu diyebiliriz admin.auth().getUserByEmail(email) .

Cloud Functions kabuğu kullanarak işlevler sunun

Cloud Functions kabuğu, işlevleri test verileriyle çağırmak için etkileşimli bir kabuk ile her tür işlev tetikleyicisine öykünür. Seçenekler, işlev türüne göre değişir, ancak temel kullanım biçimi şöyledir:

myFunctionName(data, options)

data parametresi Gerçek Zamanlı Veritabanı, Bulut Firestore ve PubSub tetikleyiciler için gereklidir ve diğer tüm fonksiyon türleri için isteğe edilir. Ayrıca, isteğe bağlı options parametre yalnızca Gerçek Zamanlı Veritabanı ve Bulut Firestore fonksiyonları için geçerlidir.

İsteğe bağlı olarak, dosyayı bir değişken olarak kaydedip onunla bir işlev çağırarak yerel bir dosyadan test verilerini yükleyebilirsiniz:

var data = require('./path/to/testData.json');
myFunction(data);

Cloud Functions kabuğunu kurun ve yapılandırın

Bu özelliği kullanmak için, firebase-tools asgari sürüm 3.11.0 sahip olmalı ve firebase-functions asgari sürüm 0.6.2 olmalıdır SDK. Her iki güncellemek için, aşağıdaki komutları çalıştırın functions/ projeniz için dizine:

npm install --save firebase-functions@latest
npm install -g firebase-tools

Özel fonksiyonları yapılandırma değişkenleri kullanıyorsanız, ilk (içinde bu koşmak özel yapılandırma almak için komutu çalıştırmak functions yerel ortamda dizine):

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ğır

Kabukta çağıran HTTPS işlevler için, kullanım aynıdır request NPM modülü, ancak onların yerini request taklit etmek istediğiniz fonksiyonun adı ile. Ö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 Callable işlevlerini çağırın

HTTPS Callable 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, bir geçebildiği Firebase-Instance-ID-token ikinci parametre olarak. Bu bir dize olmalı.

# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})

Emulation context.auth şu anda kullanılamıyor.

Gerçek Zamanlı Veritabanı işlevlerini çağır

Gerçek Zamanlı Veritabanı işlevlerini yerel olarak çalıştırırken, uygun test verilerini sağlamanız gerekir. Bu genellikle için yeni test verilerini sağlanması anlamına gelir onCreate işlemler için eski / kaldırılan verinin onDelete işlemler ve hem onUpdate veya onWrite fonksiyonlar:

# invoke onCreate function
myDatabaseFunction('new_data')

# invoke onDelete function
myDatabaseFunction('old_data')

# invoke onUpdate or onWrite function
myDatabaseFunction({before: 'old_data', after: 'new_data' })

Ek olarak before/after seçenekler, kabuk sağlar params bir yolda joker alay etmeyi kullanma seçeneğini:

# 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 Gerçek Zamanlı Veritabanı işlevlerini çalıştırır. Kullanım auth kimliği doğrulanmamış bir kullanıcı olarak belirli bir son kullanıcı olarak yerine çalışacak işlevlere seçeneği ya:

# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})

Firestore işlevlerini çağırın

Firestore işlevlerini yerel olarak çalıştırırken uygun test verilerini sağlamanız gerekir. Bu genellikle için yeni test verilerini sağlanması anlamına gelir onCreate işlemler için eski / kaldırılan verinin onDelete işlemler ve hem onUpdate veya onWrite fonksiyonlar. Firestore verilerinin anahtar/değer çiftleri olması gerektiğini unutmayın; bkz Desteklenen Veri Türleri .

# invoke onCreate function
myFirestoreFunction({foo: ‘new’})

# invoke onDelete function
myFirestoreFunction({foo: ‘old’})

# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })

Ek olarak before/after alanlarında data nesnesi, kullanabileceğiniz params üzerinde alanlar options bir belge adına sahte joker karakterler itiraz:

# 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, bir oluşturma/güncelleme/silme olayıyla sanki bir yönetici kullanıcı tarafından yapılmış gibi alay ettiği anlamına gelir.

PubSub işlevlerini çağır

PubSub işlevler için bir de mesajınızın yük insert Buffer örneği ve isteğe bağlı veri özelliklerini eklemek gösterildiği gibi:

// 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ğırın

Bu çalıştırarak bir veri olmadan bir Analitik işlevi çağırabileceği myAnalyticsFunction() kabuk. İşlevi test verileriyle çalıştırmak için işlevinizin ihtiyaç duyduğu belirli olay verileri alanları için bir değişken tanımlamanız önerilir:

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);

Depolama ve Yetkilendirme işlevlerini çağırma

Depolama ve Yetkilendirme işlevleri için, işlevin içinde görmek istediğiniz test verileriyle yerel işlevi çağırın. Test verileriniz ilgili veri formatlarını takip etmelidir:

Yalnızca kodunuzun bağlı olduğu alanları belirtin veya yalnızca işlevi çalıştırmak istiyorsanız hiçbirini belirtin.