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 bahwa Anda menginstal dan mengonfigurasi Local Emulator Suite serta meninjau perintah CLI -nya .

Pilih proyek Firebase

Firebase Local Emulator Suite mengemulasi produk untuk satu project Firebase.

Untuk memilih proyek 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.

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

Jenis proyek Fitur Gunakan dengan emulator
Nyata

Proyek Firebase yang 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 yang sebenarnya, 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 ada sumber daya langsung. Proyek-proyek ini biasanya diakses melalui codelabs 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 itu akan gagal.

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

  • Penyiapan lebih mudah, karena Anda dapat menjalankan emulator tanpa pernah membuat proyek Firebase
  • Keamanan yang lebih kuat, karena jika kode Anda secara tidak sengaja memanggil 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 berbicara dengan emulator

Android, platform Apple, dan SDK Web

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

Android
// 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 peristiwa Firestore menggunakan emulator. Saat emulator Firestore dan Cloud Functions berjalan, keduanya secara otomatis bekerja bersama.

SDK Admin

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

export FIRESTORE_EMULATOR_HOST="localhost:8080"

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

Jika Anda ingin kode Admin SDK Anda terhubung ke emulator bersama yang berjalan di lingkungan lain, Anda harus menentukan ID proyek yang sama dengan yang Anda tetapkan menggunakan Firebase CLI . Anda dapat meneruskan ID proyek ke initializeApp 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"

Hapus database Anda di antara tes

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

Dalam metode yang sesuai, lakukan operasi HTTP DELETE, dengan menyediakan projectID Firebase Anda, misalnya firestore-emulator-example , ke titik akhir 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 Anda dengan keyakinan bahwa data lama akan dihapus di antara proses dan Anda menggunakan konfigurasi pengujian baseline yang baru.

Impor dan ekspor data

Database dan Cloud Storage for Firebase emulator 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 dasar.

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 selengkapnya, lihat referensi perintah emulator .

Visualisasikan aktivitas Aturan Keamanan

Saat Anda bekerja melalui prototipe dan pengujian loop, 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.

Firestore Emulator Meminta Monitor yang menampilkan evaluasi Aturan Keamanan

Visualisasikan laporan evaluasi Aturan

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

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

Untuk mendapatkan laporan, buat kueri titik akhir yang terbuka di 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 mouse untuk informasi selengkapnya, 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 menyoroti evaluasi yang menimbulkan kesalahan tidak terdefinisi dan nilai nol:

Bagaimana emulator Cloud Firestore berbeda dari produksi

Cloud Firestore Emulator berupaya untuk mereplikasi perilaku layanan produksi dengan tepat 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 serentak ke satu dokumen, emulator mungkin lambat untuk menyelesaikan permintaan penulisan. Dalam beberapa kasus, kunci mungkin memerlukan waktu hingga 30 detik untuk dilepaskan. Pertimbangkan untuk menyesuaikan batas waktu pengujian, jika diperlukan.

Indeks

Emulator tidak melacak indeks gabungan dan sebaliknya akan menjalankan kueri 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 mungkin mengizinkan transaksi yang akan ditolak karena terlalu besar oleh layanan produksi. Pastikan Anda memahami batasan yang didokumentasikan dan Anda mendesain aplikasi untuk menghindarinya secara proaktif.

Apa selanjutnya?