Menjalankan fungsi secara lokal

Anda dapat menjalankan fungsi secara lokal untuk mengujinya sebelum menerapkannya ke produksi. Untuk menjalankan fungsi secara lokal, gunakan:

  • Shell Cloud Functions. Fitur ini mengemulasikan semua jenis pemicu fungsi dan menyediakan shell interaktif untuk mengaktifkan fungsi dengan data uji.
  • Perintah firebase serve Firebase CLI. Fitur ini mengemulasikan fungsi HTTPS sehingga menyediakan URL untuk memicu fungsi lokal.

Untuk kedua fitur ini, perubahan kode yang Anda buat selama sesi aktif otomatis dimuat ulang oleh emulator. Jika kode Anda perlu ditranspilasi (TypeScript, React), pastikan untuk melakukannya sebelum menjalankan emulator.

Menyiapkan kredensial admin (opsional)

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

  • Pemicu Cloud Firestore dan Realtime Database telah memiliki kredensial memadai, dan tidak memerlukan penyiapan tambahan.
  • Semua API lain, 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. Ini berlaku baik saat menggunakan shell fungsi maupun firebase serve.

Agar dapat menyiapkan kredensial admin untuk fungsi teremulasi (selain Cloud Firestore dan Realtime Database):

  1. Buka panel Akun Layanan pada Google Cloud Console.
  2. Pastikan akun layanan default App Engine dipilih, dan gunakan menu opsi di sebelah kanan untuk memilih Buat kunci.
  3. Saat diminta, pilih JSON untuk jenis kunci, dan 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
    
    OR
    
    $ firebase serve --only functions
    

    Windows

    $ set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    
    $ firebase functions:shell
    
    OR
    
    $ firebase serve --only functions
    

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

Menyajikan fungsi HTTP dari baris perintah

Anda dapat menyajikan dan menjalankan fungsi HTTP secara lokal menggunakan Firebase CLI. Dengan begitu, Anda dapat menampilkan dan menguji project Firebase sebelum menerapkannya ke produksi.

  1. Pastikan versi Firebase CLI dan SDK firebase-functions sudah yang terbaru. Untuk mengupdate keduanya, jalankan dua perintah berikut dari direktori functions project lokal Anda:

    npm install -g firebase-tools
    npm install --save firebase-functions@latest
  2. Sajikan project Firebase Anda secara lokal dengan menjalankan perintah berikut dari root direktori project Anda.

    Perintah ini mengemulasi hosting dan fungsi pada URL yang dihosting secara lokal.

    firebase serve
Jika Anda menggunakan Cloud Functions untuk menghasilkan konten dinamis bagi Firebase Hosting, secara default firebase serve menggunakan fungsi HTTP lokal Anda sebagai proxy untuk hosting. Untuk opsi konfigurasi lainnya bagi Firebase Hosting dan Cloud Functions, lihat Referensi Firebase CLI.

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 memicu Realtime Database dan PubSub serta bersifat opsional untuk semua jenis fungsi lainnya. Selain itu, parameter options opsional hanya berlaku untuk fungsi Realtime Database.

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 311.0 dan SDK firebase-functions minimal dalam versi 0.6.2. Untuk mengupdate keduanya, jalankan perintah berikut di direktori functions/ project Anda:

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

Jika Anda tidak menggunakan variabel konfigurasi fungsi kustom, jalankan shell dengan perintah berikut:

firebase functions:shell

Jika Anda menggunakan variabel konfigurasi fungsi kustom, jalankan perintah untuk mendapatkan konfigurasi kustom Anda (jalankan ini di dalam direktori functions), lalu jalankan shell:

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

Mengaktifkan fungsi HTTPS

Untuk mengaktifkan 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 Instance ID 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 yang lama/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 lokasi:

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

Mengaktifkan 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 opsi before/after, shell menyediakan opsi params untuk digunakan dalam karakter pengganti fiktif pada 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/update/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 hanya kolom yang diperlukan kode Anda, atau tanpa kolom sama sekali jika Anda hanya ingin menjalankan fungsi.

Logging

Fitur firebase serve dan fitur shell Cloud Functions melakukan streaming log dari fungsi Anda ke jendela terminal tempat fitur-fitur tersebut beroperasi. Fitur tersebut menampilkan semua output dari pernyataan console.log(), console.info(), console.error(), dan console.warn() di dalam fungsi Anda.

Kirim masukan tentang...

Butuh bantuan? Kunjungi halaman dukungan kami.