Uygulamanızı Cloud Firestore Emülatörüne bağlayın

Uygulamanızı Cloud Firestore emülatörüne bağlamadan önce, genel Firebase Local Emulator Suite iş akışını anladığınızdan ve Local Emulator Suite'i kurup yapılandırdığınızdan ve CLI komutlarını gözden geçirdiğinizden emin olun.

Bir Firebase projesi seçin

Firebase Local Emulator Suite, ürünleri tek bir Firebase projesi için taklit eder.

Kullanılacak projeyi seçmek için, öykünücüleri başlatmadan önce, CLI'da çalışma dizininizdeki firebase use . Veya --project bayrağını her emülatör komutuna iletebilirsiniz.

Local Emulator Suite, gerçek Firebase projelerinin ve demo projelerinin emülasyonunu destekler.

Proje tipi Özellikler Emülatörlerle kullanın
Gerçek

Gerçek bir Firebase projesi sizin oluşturup yapılandırdığınız projedir (büyük olasılıkla Firebase konsolu aracılığıyla).

Gerçek projeler, veritabanı örnekleri, depolama grupları, işlevler veya o Firebase projesi için ayarladığınız diğer kaynaklar gibi canlı kaynaklara sahiptir.

Gerçek Firebase projeleriyle çalışırken, desteklenen ürünlerin herhangi biri veya tümü için öykünücüler çalıştırabilirsiniz.

Taklit etmediğiniz tüm ürünler için uygulamalarınız ve kodunuz, canlı kaynakla (veritabanı eşgörünümü, depolama grubu, işlev vb.) etkileşime girer.

Demo

Bir demo Firebase projesinde gerçek bir Firebase yapılandırması ve canlı kaynak yoktur. Bu projelere genellikle kod laboratuvarları veya diğer öğreticiler aracılığıyla erişilir.

Demo projeleri için proje kimliklerinde demo- öneki bulunur.

Demo Firebase projeleriyle çalışırken, uygulamalarınız ve kodunuz yalnızca emülatörlerle etkileşime girer. Uygulamanız, öykünücünün çalışmadığı bir kaynakla etkileşime girmeye çalışırsa, bu kod başarısız olur.

Mümkün olan her yerde demo projeleri kullanmanızı öneririz. Avantajlar şunları içerir:

  • Bir Firebase projesi oluşturmadan öykünücüleri çalıştırabileceğiniz için daha kolay kurulum
  • Daha güçlü güvenlik, çünkü kodunuz yanlışlıkla öykünülmemiş (üretim) kaynakları çalıştırırsa veri değişikliği, kullanım ve faturalandırma şansı olmaz
  • SDK yapılandırmanızı indirmek için internete erişmeniz gerekmediğinden daha iyi çevrimdışı destek.

Öykünücülerle konuşmak için uygulamanızı kullanın

Başlangıçta, Cloud Firestore öykünücüsü, firebase.json dosyanızdaki her bir firestore yapılandırması için varsayılan bir veritabanı ve adlandırılmış bir veritabanı oluşturur. Açıkça adlandırılmış bir veritabanına Cloud Firestore Güvenlik Kuralları atamak için firebase.json dosyanızı kullanın.

Adlandırılmış veritabanları ayrıca, öykünücüye belirli bir veritabanına başvuran herhangi bir SDK veya REST API çağrısına yanıt olarak dolaylı olarak oluşturulur. Örtülü olarak oluşturulan bu tür veritabanları açık kurallarla çalışır.

Şu anda Emulator Suite UI, varsayılan veritabanıyla etkileşimli çalışmayı desteklemektedir.

Android, Apple platformları ve Web SDK'ları

Cloud Firestore ile etkileşim kurmak için uygulama içi yapılandırmanızı veya test sınıflarınızı aşağıdaki gibi ayarlayın. Aşağıdaki örneklerde, uygulama kodunun varsayılan proje veritabanına bağlandığını unutmayın. Varsayılan veritabanının ötesinde ek Cloud Firestore veritabanlarını içeren örnekler için birden çok veritabanı kılavuzuna bakın.

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);
Süratli
let settings = Firestore.firestore().settings
settings.host = "127.0.0.1:8080"
settings.isPersistenceEnabled = false 
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Web modular API

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

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

Web namespaced API

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

Öykünücü kullanılarak Firestore olayları tarafından tetiklenen Bulut İşlevlerini test etmek için ek kurulum gerekmez. Firestore ve Cloud Functions öykünücülerinin her ikisi de çalışırken otomatik olarak birlikte çalışır.

Yönetici SDK'ları

Firebase Admin SDK'ları, FIRESTORE_EMULATOR_HOST ortam değişkeni ayarlandığında otomatik olarak Cloud Firestore öykünücüsüne bağlanır:

export FIRESTORE_EMULATOR_HOST="127.0.0.1:8080"

Kodunuz Bulut İşlevleri öykünücüsü içinde çalışıyorsa, proje kimliğiniz ve diğer yapılandırmanız, initializeApp çağrılırken otomatik olarak ayarlanır.

Admin SDK kodunuzun başka bir ortamda çalışan paylaşılan bir öykünücüye bağlanmasını istiyorsanız, Firebase CLI'yi kullanarak ayarladığınız aynı proje kimliğini belirtmeniz gerekir. Doğrudan initializeApp için bir proje kimliği iletebilir veya GCLOUD_PROJECT ortam değişkenini ayarlayabilirsiniz.

Node.js Yönetici SDK'sı
admin.initializeApp({ projectId: "your-project-id" });
Çevre değişkeni
export GCLOUD_PROJECT="your-project-id"

Testler arasında veritabanınızı temizleyin

Production Firestore, veritabanını temizlemek için herhangi bir platform SDK yöntemi sağlamaz, ancak Firestore öykünücüsü size özellikle bu amaç için bir REST uç noktası verir; bu, bir test çerçevesi kurulumu/tearDown adımından, bir test sınıfından veya kabuktan (örn. , curl ile) bir test başlatılmadan önce. Bu yaklaşımı, emülatör sürecini basitçe kapatmaya bir alternatif olarak kullanabilirsiniz.

Uygun bir yöntemde, Firebase proje kimliğinizi (örneğin, firestore-emulator-example aşağıdaki uç noktaya sağlayarak bir HTTP DELETE işlemi gerçekleştirin:

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

Doğal olarak, kodunuz, yıkamanın bittiğine veya başarısız olduğuna dair REST onayını beklemelidir.

Bu işlemi kabuktan gerçekleştirebilirsiniz:

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

Bunun gibi bir adım uyguladıktan sonra, eski verilerin çalıştırmalar arasında temizleneceğinden ve yeni bir temel test yapılandırması kullandığınızdan emin olarak testlerinizi sıralayabilir ve işlevlerinizi tetikleyebilirsiniz.

Verileri içe ve dışa aktarma

Veritabanı ve Cloud Storage for Firebase öykünücüleri, çalışan bir öykünücü örneğinden verileri dışa aktarmanıza olanak tanır. Birim testlerinizde veya sürekli entegrasyon iş akışlarınızda kullanmak üzere bir temel veri seti tanımlayın ve ardından bunu ekip arasında paylaşmak üzere dışa aktarın.

firebase emulators:export ./dir

Testlerde, öykünücü başlangıcında temel verileri içe aktarın.

firebase emulators:start --import=./dir

Öykünücüye, bir dışa aktarma yolu belirterek veya yalnızca --import bayrağına iletilen yolu kullanarak kapatma sırasında verileri dışa aktarma talimatı verebilirsiniz.

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

Bu veri içe ve dışa aktarma seçenekleri, firebase emulators:exec komutuyla da çalışır. Daha fazlası için öykünücü komut başvurusuna bakın.

Güvenlik Kuralları etkinliğini görselleştirin

Prototip ve test döngüleri üzerinde çalışırken, Local Emulator Suite tarafından sağlanan görselleştirme araçlarını ve raporları kullanabilirsiniz.

İstek İzleyici'yi kullanın

Cloud Firestore öykünücüsü, Firebase Güvenlik Kuralları için değerlendirme izleme dahil, istemci isteklerini Emulator Suite kullanıcı arabiriminde görselleştirmenize olanak tanır.

Her istek için ayrıntılı değerlendirme sırasını görüntülemek üzere Firestore > İstekler sekmesini açın.

Güvenlik Kuralları değerlendirmelerini gösteren Firestore Emulator İstek İzleyicisi

Visualize Rules değerlendirme raporları

Prototipinize Güvenlik Kuralları eklerken, Local Emulator Suite hata ayıklama araçlarıyla bu Kuralların hatalarını ayıklayabilirsiniz.

Bir dizi testi çalıştırdıktan sonra, güvenlik kurallarınızdan her birinin nasıl değerlendirildiğini gösteren test kapsamı raporlarına erişebilirsiniz.

Raporları almak için öykünücü çalışırken açıkta kalan bir uç noktayı sorgulayın. Tarayıcı dostu bir sürüm için aşağıdaki URL'yi kullanın:

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

Bu, kurallarınızı, değerlendirme sayısı ve döndürülen değerler dahil olmak üzere daha fazla bilgi için fareyle üzerine getirebileceğiniz ifadelere ve alt ifadelere ayırır. Bu verilerin ham JSON sürümü için sorgunuza aşağıdaki URL'yi ekleyin:

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

Burada, raporun HTML sürümü, tanımsız ve boş değerli hatalar oluşturan değerlendirmeleri vurgulamaktadır:

Cloud Firestore öykünücüsünün üretimden farkı nedir?

Cloud Firestore Emulator, üretim hizmetinin davranışını bazı dikkate değer sınırlamalarla aslına uygun şekilde kopyalamaya çalışır.

Cloud Firestore için çoklu veritabanı desteği

Şu anda, Emulator Suite Kullanıcı Arabirimi, varsayılan bir veritabanı için etkileşimli oluşturma, düzenleme, silme, istek izleme ve güvenlik görselleştirmeyi destekler, ancak ek adlandırılmış veritabanlarını desteklemez.

Ancak öykünücünün kendisi, firebase.json dosyanızdaki yapılandırmaya dayalı olarak ve dolaylı olarak SDK veya REST API çağrılarına yanıt olarak adlandırılmış bir veritabanı oluşturur.

İşlemler

Öykünücü şu anda üretimde görülen tüm işlem davranışlarını uygulamamaktadır. Bir belgeye birden çok eşzamanlı yazma içeren özellikleri test ederken, öykünücü yazma isteklerini tamamlamakta yavaş olabilir. Bazı durumlarda, kilitlerin açılması 30 saniyeye kadar sürebilir. Gerekirse test zaman aşımlarını buna göre ayarlamayı düşünün.

indeksler

Öykünücü bileşik dizinleri izlemez ve bunun yerine herhangi bir geçerli sorgu yürütür. Hangi dizinlere ihtiyacınız olacağını belirlemek için uygulamanızı gerçek bir Cloud Firestore örneğine karşı test ettiğinizden emin olun.

Limitler

Öykünücü, üretimde uygulanan tüm sınırları zorlamaz. Örneğin öykünücü, üretim hizmeti tarafından çok büyük olduğu için reddedilecek işlemlere izin verebilir. Belgelenen sınırlara aşina olduğunuzdan ve uygulamanızı bunlardan proaktif olarak kaçınacak şekilde tasarladığınızdan emin olun.

Sırada ne var?