Uygulamanızı Realtime Database Emulator'a bağlama

Uygulamanızı Realtime Database emülatörüne bağlamadan önce Firebase Local Emulator Suite iş akışını genel olarak 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

Android, Apple platformları ve Web SDK'ları

Realtime Database 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.

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 database = Firebase.database
database.useEmulator("10.0.2.2", 9000)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseDatabase database = FirebaseDatabase.getInstance();
database.useEmulator("10.0.2.2", 9000);
Swift
    // In almost all cases the ns (namespace) is your project ID.
let db = Database.database(url:"http://127.0.0.1:9000?ns=YOUR_DATABASE_NAMESPACE")

Web

import { getDatabase, connectDatabaseEmulator } from "firebase/database";

const db = getDatabase();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  connectDatabaseEmulator(db, "127.0.0.1", 9000);
} 

Web

var db = firebase.database();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  db.useEmulator("127.0.0.1", 9000);
} 

Realtime Database etkinlikleri tarafından tetiklenen Cloud Functions'ı emülatörü kullanarak test etmek için ek kuruluma gerek yoktur. Realtime Database ve Cloud Functions emülatörleri çalışırken otomatik olarak birlikte çalışırlar.

Yönetici SDK'ları

FIREBASE_DATABASE_EMULATOR_HOST ortam değişkeni ayarlandığında Firebase Admin SDK'ları, Realtime Database emülatörüne otomatik olarak bağlanır:

export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"

Kodunuz Cloud Functions emülatöründe çalışıyorsa initializeApp çağrısı yapılırken proje kimliğiniz ve diğer yapılandırmalar 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

Realtime Database'i etkinlikler arasında temizlemek için veritabanı referansını temizleyebilirsiniz. Bu yaklaşımı, emülatör işlemini kapatmaya alternatif olarak kullanabilirsiniz.

Kotlin+KTX
// With a DatabaseReference, write null to clear the database.
database.reference.setValue(null)
Java
// With a DatabaseReference, write null to clear the database.
database.getReference().setValue(null);
Swift
// With a DatabaseReference, write nil to clear the database.
    Database.database().reference().setValue(nil);

Web

import { getDatabase, ref, set } from "firebase/database";

// With a database Reference, write null to clear the database.
const db = getDatabase();
set(ref(db), null);

Web

// With a database Reference, write null to clear the database.
firebase.database().ref().set(null);

Doğal olarak kodunuz, boşaltma işleminin tamamlandığına veya platformunuzun eşzamansız etkinlik işleme özellikleri kullanılarak başarısız olduğuna dair onayı beklemelidir.

Bunun gibi bir adım uyguladıktan sonra, çalıştırmalar arasında eski veriler silineceğinden ve yeni bir referans test yapılandırması kullandığınızdan emin olmak 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.

Kural değerlendirmelerini görselleştirme

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

Bir dizi test çalıştırdıktan sonra, 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:9000/.inspect/coverage?ns=<database_name>

Bu işlem kurallarınızı ifadelere ve alt ifadelere ayırır. Bunlara, yürütme işlemi ve döndürülen değerler 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:9000/.inspect/coverage.json?ns=<database_name>

Sonrasında ne olacak?