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 | 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.
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?
- Untuk serangkaian video pilihan dan contoh cara mendetail, ikuti Daftar Putar Pelatihan Firebase Emulators .
- Selidiki kasus penggunaan lanjutan yang melibatkan pengujian Aturan Keamanan dan Firebase Test SDK: Uji Aturan Keamanan (Firestore) .
- Karena fungsi yang dipicu adalah integrasi umum dengan Cloud Firestore, pelajari emulator Cloud Functions for Firebase lebih lanjut di Jalankan fungsi secara lokal .