Uygulamanızı Cloud Firestore Emulator'a bağlayın

Uygulamanızı Cloud Firestore emülatörüne bağlamadan önce, Firebase Local Emulator Suite iş akışını anladığınızdan ve Local Emulator Suite'i yükleyip yapılandırdığınızdan ve CLI komutlarını incelediğinizden emin olun.

Firebase projesi seçin

Firebase Local Emulator Suite, tek bir Firebase projesi için ürün emülasyonu yapar.

Kullanılacak projeyi seçmek için emülatörleri başlatmadan önce, çalışma dizininizde CLI'yı firebase use çalıştırın. Alternatif olarak --project işaretini her emülatör komutuna aktarabilirsiniz.

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

Proje türü Özellikler Emülatörlerle kullanım
Gerçek

Gerçek bir Firebase projesi, sizin oluşturduğunuz ve yapılandırdığınız (büyük olasılıkla Firebase konsolu üzerinden) bir projedir.

Gerçek projelerde veritabanı örnekleri, depolama paketleri, işlevler veya Firebase projesi için oluşturduğunuz diğer kaynaklar gibi canlı kaynaklar bulunur.

Gerçek Firebase projeleriyle çalışırken, desteklenen ürünlerin herhangi biri veya tümü için emülatörler çalıştırabilirsiniz.

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

Demo

Demo Firebase projesinin gerçek bir Firebase yapılandırması yoktur ve canlı kaynak yoktur. Bu projelere genellikle codelab'ler veya diğer eğiticiler aracılığıyla erişilir.

Demo projeleri için proje kimlikleri demo- önekine sahiptir.

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

Mümkün olan her yerde demo projeleri kullanmanızı öneririz. Sunulan avantajlar arasında şunlar sayılabilir:

  • Emülatörleri bir Firebase projesi oluşturmadan çalıştırabileceğiniz için kurulumu daha kolaydır
  • Kodunuz yanlışlıkla emüle edilmemiş (üretim) kaynakları çağırırsa veri değişikliği, kullanım ve faturalandırma söz konusu olmayacağından daha yüksek güvenlik
  • SDK yapılandırmanızı indirmek için internete erişmeniz gerekmediğinden daha iyi çevrimdışı destek.

Emülatörlerle konuşmak için uygulamanızı kullanın

Başlangıçta Cloud Firestore emülatörü, firebase.json dosyanızdaki her firestore yapılandırması için varsayılan bir veritabanı ve adlandırılmış veritabanı oluşturur.

Adlandırılmış veritabanları, belirli bir veritabanına başvuran emülatöre yapılan SDK veya REST API çağrılarına yanıt olarak da örtülü olarak oluşturulur. Bu tür doğrudan oluşturulan veritabanları açık kurallarla çalışır.

Emulator Suite kullanıcı arayüzünde varsayılan ve adlandırılmış veritabanlarınızla etkileşimli olarak çalışmak için tarayıcınızın adres çubuğundaki URL'yi, varsayılan veya adlandırılmış veritabanını seçecek şekilde güncelleyin.

  • Örneğin, varsayılan örneğinizdeki verilere göz atmak için URL'yi localhost:4000/firestore/default/data olarak güncelleyin.
  • ecommerce adlı bir örneğe göz atmak için localhost:4000/firestore/ecommerce/data olarak güncelleyin.

Android, Apple platformları ve Web SDK'ları

Cloud Firestore ile etkileşime geçmek 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 ötesindeki ek Cloud Firestore veritabanlarını içeren örnekler için birden fazla 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);
Swift
let settings = Firestore.firestore().settings
settings.host = "127.0.0.1:8080"
settings.cacheSettings = MemoryCacheSettings()
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Web

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

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

Web

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

Emülatörü kullanarak Firestore etkinlikleri tarafından tetiklenen Cloud Functions'ı test etmek için ek bir kurulum yapılması gerekmez. Firestore ve Cloud Functions emülatörleri çalışırken otomatik olarak birlikte çalışırlar.

Yönetici SDK'ları

FIRESTORE_EMULATOR_HOST ortam değişkeni ayarlandığında Firebase Yönetici SDK'ları, Cloud Firestore emülatörüne otomatik olarak bağlanır:

export FIRESTORE_EMULATOR_HOST="127.0.0.1:8080"

Kodunuz Cloud Functions emülatöründe çalışıyorsa proje kimliğiniz ve diğer yapılandırmalar initializeApp çağrılırken otomatik olarak ayarlanır.

Yönetici SDK'sı kodunuzun başka bir ortamda çalışan paylaşılan bir emülatöre bağlanmasını istiyorsanız Firebase CLI kullanarak ayarladığınız proje kimliğini belirtmeniz gerekir. Bir proje kimliğini doğrudan initializeApp hizmetine iletebilir veya GCLOUD_PROJECT ortam değişkenini ayarlayabilirsiniz.

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

Testler arasında veritabanınızı temizleme

Üretim Firestore, veritabanını temizlemek için herhangi bir platform SDK yöntemi sağlamaz, ancak Firestore emülatörü size özellikle bu amaç için bir REST uç noktası sağlar.Bu uç nokta, bir test çerçevesi kurulumu/sökümü adımında, bir test sınıfından veya test başlatılmadan önce kabuktan (ör. curl ile) çağrılabilir. Bu yaklaşımı, emülatör işlemini kapatmaya alternatif olarak kullanabilirsiniz.

Uygun bir yöntem kullanarak aşağıdaki uç noktaya Firebase proje kimliğinizi (ör. firestore-emulator-example) 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, temizleme işleminin tamamlandığına 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"

Böyle bir adım uyguladıktan sonra, çalıştırmalar arasında eski verilerin kalıcı olarak silineceği ve yeni bir temel test yapılandırması kullandığınız için testlerinizi sıralayabilir ve işlevlerinizi tetikleyebilirsiniz.

Verileri içe ve dışa aktarma

Veritabanı ve Cloud Storage for Firebase emülatörleri, çalışan bir emülatör örneğinden verileri dışa aktarmanıza olanak tanır. Birim testlerinizde veya sürekli entegrasyon iş akışlarınızda kullanılacak temel bir veri kümesi tanımlayın, ardından bu verileri ekip arasında paylaşılmak üzere dışa aktarın.

firebase emulators:export ./dir

Testlerde, emülatör başlatılırken referans verileri içe aktarın.

firebase emulators:start --import=./dir

Emülatöre, kapanma sırasında verileri dışa aktarma talimatını vermek için bir dışa aktarma yolu belirtebilir veya sadece --import işaretine iletilen yolu kullanabilirsiniz.

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 fazla bilgi için emülatör komut referansına bakın.

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

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

İstek İzleyici'yi kullanma

Cloud Firestore emülatörü, Firebase Güvenlik Kuralları için değerlendirme izleme dahil olmak üzere istemci isteklerini Emulator Suite kullanıcı arayüzünde görselleştirmenizi sağlar.

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

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

Kurallar değerlendirme raporlarını görselleştirme

Prototipinize Güvenlik Kuralları eklerken Yerel Emulator Suite hata ayıklama araçlarıyla bu kurallarda hata ayıklayabilirsiniz.

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

Raporları almak için emülatör çalışırken açığa çıkan 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 işlem, kurallarınızı ifadelere ve alt ifadelere böler. Bunları, değerlendirme sayısı ve döndürülen değerlerin sayısı dahil olmak üzere daha fazla bilgi için fareyle üzerine gelebilirsiniz. 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ımlanmamış ve boş değerli hatalara neden olan değerlendirmeleri vurgular:

Cloud Firestore emülatörünün üretimden farkı nedir?

Cloud Firestore Emulator, bazı önemli sınırlamalarla üretim hizmetinin davranışını aslına uygun şekilde kopyalamaya çalışır.

Cloud Firestore için birden fazla veritabanı desteği

Emulator Suite kullanıcı arayüzü, şu anda varsayılan veritabanı için etkileşimli oluşturma, düzenleme, silme, istek izleme ve güvenlik görselleştirmesini desteklemektedir ancak ek adlandırılmış veritabanlarını desteklemez.

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

İşlemler

Emülatör şu anda üretimde görünen tüm işlem davranışlarını uygulamaz. Bir belgeye aynı anda birden fazla yazma işlemi içeren özellikleri test ederken emülatör, yazma isteklerini tamamlama konusunda yavaş olabilir. Bazı durumlarda kilitlerin açılması 30 saniye sürebilir. Gerekirse test zaman aşımlarını buna göre ayarlamayı düşünebilirsiniz.

Dizinler

Emülatör, bileşik dizinleri izlemez ve bunun yerine geçerli herhangi bir sorguyu yürütür. İhtiyacınız olacak dizinleri belirlemek için uygulamanızı gerçek bir Cloud Firestore örneğiyle test ettiğinizden emin olun.

Sınırlar

Emülatör, üretimde uygulanan tüm sınırları zorunlu kılmaz. Örneğin emülatör, üretim hizmeti tarafından çok büyük olarak reddedilecek işlemlere izin verebilir. Belgelenmiş sınırlar hakkında bilgi sahibi olduğunuzdan ve uygulamanızı bu sınırlardan proaktif olarak kaçınacak şekilde tasarladığınızdan emin olun.

Sonrasında ne olacak?