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

Uygulamanızı Cloud Firestore öykünücüsüne bağlamadan önce, genel 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ı gözden geçirdiğinizden emin olun.

Firebase projesi seçin

Firebase Local Emulator Suite, tek bir Firebase projesine yönelik ürünleri taklit eder.

Kullanılacak projeyi seçmek için emülatörleri başlatmadan önce, CLI'de çalışma dizininizde firebase use çalıştırın. Veya --project bayrağını her emulator 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, oluşturduğunuz ve yapılandırdığınız projedir (büyük olasılıkla Firebase konsolu aracılığıyla).

Gerçek projelerde veritabanı örnekleri, depolama grupları, işlevler veya Firebase projesi için ayarladığınız 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.

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

Demo

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

Demo projelerine ait 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, öykünücünün çalışmadığı bir kaynakla etkileşim kurmaya çalışırsa bu kod başarısız olur.

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

  • Emülatörleri Firebase projesi oluşturmadan çalıştırabileceğiniz için daha kolay kurulum
  • Kodunuzun yanlışlıkla öykünmemiş (üretim) kaynakları çağırması durumunda veri değişikliği, kullanım ve faturalandırma şansı olmayacağı için daha güçlü güvenlik
  • SDK yapılandırmanızı indirmek için internete erişmenize gerek olmadığından daha iyi çevrimdışı destek.

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

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

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

Şu anda Emulator Suite kullanıcı arayüzü, 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 fazla veritabanına yönelik kılavuza 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.cacheSettings = MemoryCacheSettings()
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üyü kullanarak Firestore olayları tarafından tetiklenen Bulut İşlevlerini test etmek için ek kurulum gerekmez. Firestore ve Cloud Functions emülatörlerinin her ikisi de çalışırken otomatik olarak birlikte çalışırlar.

Yönetici SDK'ları

Firebase Yönetici 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 Cloud Functions ö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 proje kimliğinin aynısını 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 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 işlemini basitçe kapatmaya 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, temizleme işleminin tamamlandığını veya başarısız olduğunu gösteren 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 aktar

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 kullanılacak temel veri kümesini tanımlayın ve ardından bunu ekip arasında paylaşılmak üzere dışa aktarın.

firebase emulators:export ./dir

Testlerde emülatör başlatıldığı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 aktarması talimatını 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 fazla bilgi için emülatör komut referansına 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 Monitörünü Kullanın

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

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ü

Kural değerlendirme raporlarını görselleştirin

Prototipinize Güvenlik Kuralları ekledikçe, Local Emulator Suite hata ayıklama araçlarını kullanarak bunların hatalarını 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çı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 de dahil olmak üzere daha fazla bilgi için fareyle üzerine gelebileceğ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ğer hataları veren değerlendirmeleri vurgulamaktadır:

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

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

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

Şu anda Emulator Suite kullanıcı arayüzü, varsayılan bir veritabanı için etkileşimli oluşturma, düzenleme, silme, istek izleme ve güvenlik görselleştirmesini destekler, ancak adlandırılmış ek 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

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

Dizinler

Emülatör bileşik indeksleri izlemez ve bunun yerine geçerli herhangi bir sorguyu yürütür. Hangi dizinlere ihtiyacınız olacağını 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ı uygulamaz. Örneğin emülatör, üretim hizmeti tarafından çok büyük olduğu gerekçesiyle reddedilecek işlemlere izin verebilir. Belgelenen sınırlara aşina olduğunuzdan ve uygulamanızı proaktif olarak bunlardan kaçınacak şekilde tasarladığınızdan emin olun.

Sırada ne var?