Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Hubungkan aplikasi Anda ke Emulator Cloud Firestore

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Sebelum menghubungkan aplikasi Anda ke emulator Cloud Firestore, pastikan Anda memahami keseluruhan alur kerja Firebase Local Emulator Suite , dan Anda menginstal dan mengonfigurasi Local Emulator Suite dan meninjau perintah CLI -nya.

Pilih proyek Firebase

Firebase Local Emulator Suite mengemulasikan produk untuk satu proyek Firebase.

Untuk memilih project yang akan digunakan, sebelum Anda memulai emulator, di CLI jalankan firebase use di direktori kerja Anda. Atau, Anda dapat meneruskan flag --project ke setiap perintah emulator.

Local Emulator Suite mendukung emulasi proyek Firebase nyata dan proyek demo .

Jenis proyek Fitur Gunakan dengan emulator
Nyata

Proyek Firebase sebenarnya adalah proyek yang Anda buat dan konfigurasikan (kemungkinan besar melalui konsol Firebase).

Proyek nyata memiliki sumber daya langsung, seperti instance database, keranjang penyimpanan, fungsi, atau sumber daya lain yang Anda siapkan untuk proyek Firebase tersebut.

Saat bekerja dengan proyek Firebase nyata, Anda dapat menjalankan emulator untuk salah satu atau semua produk yang didukung.

Untuk produk apa pun yang tidak Anda tiru, aplikasi dan kode Anda akan berinteraksi dengan sumber daya langsung (instance database, keranjang penyimpanan, fungsi, dll.).

Demo

Proyek demo Firebase tidak memiliki konfigurasi Firebase nyata dan tidak memiliki sumber daya langsung. Project ini biasanya diakses melalui codelab atau tutorial lainnya.

ID Proyek untuk proyek demo memiliki awalan demo- .

Saat bekerja dengan proyek demo Firebase, aplikasi dan kode Anda hanya berinteraksi dengan emulator . Jika aplikasi Anda mencoba berinteraksi dengan sumber daya yang emulatornya tidak berjalan, kode tersebut akan gagal.

Kami menyarankan Anda menggunakan proyek demo sedapat mungkin. Manfaat meliputi:

  • Penyiapan yang lebih mudah, karena Anda dapat menjalankan emulator tanpa harus membuat project Firebase
  • Keamanan yang lebih kuat, karena jika kode Anda secara tidak sengaja mengaktifkan sumber daya (produksi) yang tidak ditiru, tidak ada kemungkinan perubahan data, penggunaan, dan penagihan
  • Dukungan offline yang lebih baik, karena tidak perlu mengakses internet untuk mengunduh konfigurasi SDK Anda.

Instrumen aplikasi Anda untuk berkomunikasi dengan emulator

Android, platform Apple, dan Web SDK

Siapkan konfigurasi dalam aplikasi atau class pengujian Anda untuk berinteraksi dengan Cloud Firestore sebagai berikut.

Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val firestore = Firebase.firestore
firestore.useEmulator("10.0.2.2", 8080)

firestore.firestoreSettings = firestoreSettings {
    isPersistenceEnabled = false
}
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFirestore firestore = FirebaseFirestore.getInstance();
firestore.useEmulator("10.0.2.2", 8080);

FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
        .setPersistenceEnabled(false)
        .build();
firestore.setFirestoreSettings(settings);
Cepat
let settings = Firestore.firestore().settings
settings.host = "localhost:8080"
settings.isPersistenceEnabled = false 
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Web version 9

import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, 'localhost', 8080);

Web version 8

// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 8080);
}

Tidak diperlukan penyiapan tambahan untuk menguji Cloud Functions yang dipicu oleh kejadian Firestore menggunakan emulator. Saat emulator Firestore dan Cloud Functions keduanya berjalan, keduanya secara otomatis bekerja bersama.

SDK Admin

Firebase Admin SDK secara otomatis terhubung ke emulator Cloud Firestore saat variabel lingkungan FIRESTORE_EMULATOR_HOST disetel:

export FIRESTORE_EMULATOR_HOST="localhost:8080"

Jika kode Anda dijalankan di dalam emulator Cloud Functions, project ID Anda dan konfigurasi lainnya akan disetel secara otomatis saat memanggil initalizeApp .

Jika Anda ingin kode Admin SDK terhubung ke emulator bersama yang berjalan di lingkungan lain, Anda harus menentukan ID proyek yang sama dengan yang Anda atur menggunakan Firebase CLI . Anda dapat meneruskan ID proyek untuk initializeApp Aplikasi secara langsung atau menyetel variabel lingkungan GCLOUD_PROJECT .

SDK Admin Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variabel Lingkungan
export GCLOUD_PROJECT="your-project-id"

Bersihkan basis data Anda di antara pengujian

Firestore Produksi tidak menyediakan metode SDK platform untuk membersihkan database, tetapi emulator Firestore memberi Anda titik akhir REST khusus untuk tujuan ini, yang dapat dipanggil dari langkah penyiapan/pembongkaran kerangka pengujian, dari kelas pengujian, atau dari shell (mis. , dengan curl ) sebelum ujian dimulai. Anda dapat menggunakan pendekatan ini sebagai alternatif untuk sekadar mematikan proses emulator.

Dengan metode yang sesuai, lakukan operasi HTTP DELETE, berikan projectID Firebase Anda, misalnya firestore-emulator-example , ke endpoint berikut:

"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

Secara alami, kode Anda harus menunggu konfirmasi REST bahwa flush selesai atau gagal.

Anda dapat melakukan operasi ini dari shell:

// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

Setelah menerapkan langkah seperti ini, Anda dapat mengurutkan pengujian dan memicu fungsi dengan keyakinan bahwa data lama akan dihapus di antara proses dan Anda menggunakan konfigurasi pengujian dasar yang baru.

Mengimpor dan mengekspor data

Basis data dan emulator Cloud Storage for Firebase memungkinkan Anda mengekspor data dari instance emulator yang sedang berjalan. Tentukan kumpulan data dasar untuk digunakan dalam pengujian unit atau alur kerja integrasi berkelanjutan, lalu ekspor untuk dibagikan di antara tim.

firebase emulators:export ./dir

Dalam pengujian, saat memulai emulator, impor data baseline.

firebase emulators:start --import=./dir

Anda dapat menginstruksikan emulator untuk mengekspor data saat dimatikan, baik dengan menentukan jalur ekspor atau cukup menggunakan jalur yang diteruskan ke tanda --import .

firebase emulators:start --import=./dir --export-on-exit

Opsi impor dan ekspor data ini juga berfungsi dengan perintah firebase emulators:exec . Untuk lebih lanjut, lihat referensi perintah emulator .

Visualisasikan aktivitas Aturan Keamanan

Saat Anda mengerjakan prototipe dan loop pengujian, Anda dapat menggunakan alat visualisasi dan laporan yang disediakan oleh Local Emulator Suite.

Gunakan Monitor Permintaan

Emulator Cloud Firestore memungkinkan Anda memvisualisasikan permintaan klien di UI Emulator Suite, termasuk pelacakan evaluasi untuk Aturan Keamanan Firebase.

Buka tab Firestore > Permintaan untuk melihat urutan evaluasi mendetail untuk setiap permintaan.

Pemantauan Permintaan Emulator Firestore menampilkan evaluasi Aturan Keamanan

Visualisasikan laporan evaluasi Aturan

Saat Anda menambahkan Aturan Keamanan ke prototipe, Anda dapat men-debugnya dengan alat debug Local Emulator Suite.

Setelah menjalankan rangkaian pengujian, Anda dapat mengakses laporan cakupan pengujian yang menunjukkan bagaimana setiap aturan keamanan Anda dievaluasi.

Untuk mendapatkan laporan, kueri endpoint yang terekspos pada emulator saat sedang berjalan. Untuk versi ramah browser, gunakan URL berikut:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

Ini memecah aturan Anda menjadi ekspresi dan subekspresi yang dapat Anda arahkan dengan mouse untuk informasi lebih lanjut, termasuk jumlah evaluasi dan nilai yang dikembalikan. Untuk versi JSON mentah dari data ini, sertakan URL berikut dalam kueri Anda:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage

Di sini, versi HTML dari laporan tersebut menyoroti evaluasi yang melontarkan kesalahan yang tidak ditentukan dan bernilai nol:

Perbedaan antara emulator Cloud Firestore dan produksi

Cloud Firestore Emulator mencoba mereplikasi perilaku layanan produksi dengan setia dengan beberapa batasan penting.

Transaksi

Emulator saat ini tidak mengimplementasikan semua perilaku transaksi yang terlihat dalam produksi. Saat Anda menguji fitur yang melibatkan beberapa penulisan bersamaan ke satu dokumen, emulator mungkin lambat untuk menyelesaikan permintaan tulis. Dalam beberapa kasus, kunci mungkin memerlukan waktu hingga 30 detik untuk dibuka. Pertimbangkan untuk menyesuaikan batas waktu pengujian, jika diperlukan.

Indeks

Emulator tidak melacak indeks majemuk dan sebagai gantinya akan mengeksekusi kueri apa pun yang valid. Pastikan untuk menguji aplikasi Anda terhadap instance Cloud Firestore nyata untuk menentukan indeks mana yang Anda perlukan.

Batas

Emulator tidak menerapkan semua batasan yang diberlakukan dalam produksi. Misalnya, emulator dapat mengizinkan transaksi yang akan ditolak karena terlalu besar oleh layanan produksi. Pastikan Anda memahami batasan yang terdokumentasi dan mendesain aplikasi untuk menghindarinya secara proaktif.

Apa selanjutnya?