Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Menguji fungsi secara interaktif

Shell Cloud Functions menyediakan shell interaktif untuk memanggil fungsi dengan data pengujian. Shell mendukung semua jenis pemicu.

Menyiapkan kredensial admin (opsional)

Jika ingin pengujian fungsi berinteraksi dengan Google API atau Firebase API lainnya melalui Firebase Admin SDK, Anda mungkin perlu menyiapkan kredensial admin.

  • Pemicu Cloud Firestore dan Realtime Database telah memiliki kredensial memadai, dan tidak memerlukan penyiapan tambahan.
  • Semua API lainnya, termasuk Firebase API seperti Authentication dan FCM, atau Google API seperti Cloud Translation atau Cloud Speech, memerlukan langkah penyiapan tambahan yang dijelaskan dalam bagian ini. Hal ini berlaku baik saat Anda menggunakan shell fungsi maupun firebase emulators:start.

Agar dapat menyiapkan kredensial admin untuk fungsi teremulasi:

  1. Buka panel Akun Layanan di Google Cloud Console.
  2. Pastikan akun layanan default App Engine dipilih, lalu gunakan menu opsi di sebelah kanan untuk memilih Buat kunci.
  3. Saat diminta, pilih JSON untuk jenis kunci, lalu klik Buat.
  4. Atur agar kredensial default Google Anda mengarah ke kunci yang telah didownload:

    Unix

    $ export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    
    $ firebase functions:shell
    

    Windows

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

Setelah menyelesaikan langkah-langkah ini, pengujian fungsi Anda dapat mengakses Firebase API dan Google API menggunakan Admin SDK. Misalnya, saat menguji pemicu Authentication, fungsi yang diemulasi dapat memanggil admin.auth().getUserByEmail(email).

Menyajikan fungsi menggunakan shell Cloud Functions

Shell Cloud Functions mengemulasikan semua jenis pemicu fungsi dan menyediakan shell interaktif untuk mengaktifkan fungsi dengan data uji. Pilihan bervariasi berdasarkan jenis fungsi, namun format penggunaan dasarnya adalah:

myFunctionName(data, options)

Parameter data diperlukan untuk pemicu Realtime Database, Cloud Firestore, dan PubSub, serta opsional untuk semua jenis fungsi lainnya. Selain itu, parameter options opsional hanya valid untuk fungsi Realtime Database dan Cloud Firestore.

Secara opsional, Anda dapat memuat data uji dari file lokal dengan menyimpan file sebagai variabel dan mengaktifkan fungsi dari variabel tersebut:

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

Menginstal dan mengonfigurasi shell Cloud Functions

Untuk memanfaatkan fitur ini, gunakan firebase-tools minimal dalam versi 3.11.0, dan SDK firebase-functions minimal dalam versi 0.6.2. Untuk mengupdate keduanya, jalankan perintah berikut dalam direktori functions/ untuk project Anda:

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

Jika Anda menggunakan variabel konfigurasi fungsi kustom, jalankan perintah terlebih dahulu untuk mendapatkan konfigurasi kustom (jalankan ini dalam direktori functions) di lingkungan lokal Anda:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

Terakhir, jalankan shell dengan perintah berikut:

firebase functions:shell

Memanggil fungsi HTTPS

Untuk memanggil fungsi HTTPS dalam shell, penggunaannya sama dengan modul NPM request, tetapi ganti request dengan nama fungsi yang ingin Anda emulasikan. Contoh:

# 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' })

Mengaktifkan fungsi Callable HTTPS

Saat mengaktifkan fungsi Callable HTTPS secara lokal, Anda harus menyediakan data uji yang sesuai.

# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})

Jika ingin, Anda dapat meneruskan Firebase-Instance-ID-token sebagai parameter kedua. Parameter ini harus berupa string.

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

Emulasi context.auth saat ini tidak tersedia.

Mengaktifkan fungsi Realtime Database

Saat menjalankan fungsi Realtime Database secara lokal, Anda harus menyediakan data uji yang sesuai. Ini berarti Anda harus menyediakan data uji baru untuk operasi onCreate, data lama/telah dihapus untuk operasi onDelete, dan kedua jenis data tersebut untuk fungsi onUpdate atau 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' })

Selain opsi before/after, shell menyediakan opsi params untuk digunakan dalam karakter pengganti fiktif di jalur:

# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})

Secara default, shell menjalankan fungsi Realtime Database dengan hak istimewa admin (akun layanan). Gunakan opsi auth untuk menjalankan fungsi sebagai pengguna akhir tertentu atau sebagai pengguna yang tidak terautentikasi:

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

Memanggil fungsi Firestore

Saat menjalankan fungsi Firestore secara lokal, Anda harus menyediakan data uji yang sesuai. Ini berarti Anda harus menyediakan data uji baru untuk operasi onCreate, data lama/telah dihapus untuk operasi onDelete, dan kedua jenis data tersebut untuk fungsi onUpdate atau onWrite. Perhatikan bahwa data Firestore harus berupa key-value pair; lihat Jenis Data yang Didukung.

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

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

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

Selain kolom before/after objek data, Anda dapat menggunakan kolom params di objek options untuk membuat karakter pengganti fiktif di nama dokumen:

# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})

Shell selalu menjalankan fungsi Firestore dengan hak istimewa administratif, yang berarti shell meniru peristiwa buat/perbarui/hapus seolah-olah peristiwa tersebut dilakukan oleh pengguna administratif.

Mengaktifkan fungsi PubSub

Untuk fungsi PubSub, masukkan payload pesan Anda di instance Buffer dan tambahkan atribut data opsional seperti yang ditunjukkan:

// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})

Mengaktifkan fungsi Analytics

Anda dapat mengaktifkan fungsi Analytics tanpa data dengan menjalankan myAnalyticsFunction() di shell. Untuk menjalankan fungsi dengan data uji, sebaiknya Anda menetapkan variabel untuk kolom data peristiwa tertentu yang dibutuhkan oleh fungsi Anda:

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

Mengaktifkan fungsi Storage, Auth, dan Crashlytics

Untuk fungsi Storage, Auth, dan Crashlytics, aktifkan fungsi lokal dengan data uji yang ingin Anda temukan di dalam fungsi tersebut. Data uji Anda harus mengikuti format data yang sesuai:

Tentukan kolom yang diperlukan kode Anda saja, atau tanpa kolom sama sekali jika Anda hanya ingin menjalankan fungsi.