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

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

Firebase projesi seçme

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

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

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

Proje türü Özellikler Emülatörlerle kullanma
Real

Gerçek bir Firebase projesi, 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 söz konusu 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ör çalıştırabilirsiniz.

Emüle etmediğiniz ürünler için uygulamalarınız ve kodunuz canlı kaynakla (veritabanı örneği, depolama alanı paketi, işlev vb.) etkileşim kurar.

Demo

Demo Firebase projesinde gerçek Firebase yapılandırması ve canlı kaynaklar yoktur. Bu projelere genellikle codelab'ler veya diğer eğitimler üzerinden erişilir.

Demo projelerinin proje kimliklerinde demo- ön eki bulunur.

Demo Firebase projeleriyle çalışırken uygulamalarınız ve kodunuz yalnızca emülatörlerle etkileşim kurar. 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 olduğunda demo projeleri kullanmanızı öneririz. Sunulan avantajlar arasında şunlar sayılabilir:

  • Firebase projesi oluşturmadan emülatörleri çalıştırabildiğiniz için daha kolay kurulum
  • Kodunuz yanlışlıkla emüle edilmemiş (üretim) kaynakları çağırırsa veri değişikliği, kullanım ve faturalandırma olasılığı olmadığından daha güçlü güvenlik
  • SDK yapılandırmanızı indirmek için internete erişmeniz gerekmediğinden daha iyi çevrimdışı destek sunulur.

Uygulamanızı emülatörlerle iletişim kuracak şekilde yapılandırma

Android, Apple platformları ve web SDK'ları

Uygulama içi yapılandırmanızı veya test sınıflarınızı Realtime Database ile aşağıdaki gibi etkileşim kuracak şekilde ayarlayın.

Kotlin
// 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")
Unity
// Connects to the RTDB Emulator running on port 9000.
// Note: You may need to append your namespace: "?ns=YOUR_PROJECT_ID"
FirebaseDatabase database = FirebaseDatabase.GetInstance("http://127.0.0.1:9000");

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);
} 

Emülatörü kullanarak Realtime Database etkinlikleri tarafından tetiklenen Cloud Functions işlevlerini test etmek için ek kurulum gerekmez. Realtime Database ve Cloud Functions emülatörleri çalışırken otomatik olarak birlikte çalışır.

Admin SDK

FIREBASE_DATABASE_EMULATOR_HOST ortam değişkeni ayarlandığında Firebase Admin SDK, 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ıldığında proje kimliğiniz ve diğer yapılandırmalar otomatik olarak ayarlanır.

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

Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
Ortam Değişkeni
export GCLOUD_PROJECT="your-project-id"

Testler arasında veritabanınızı temizleme

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

Kotlin
// 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, platformunuzun eşzamansız etkinlik işleme özelliklerini kullanarak temizleme işleminin tamamlandığına veya başarısız olduğuna dair onay beklemelidir.

Böyle bir adım uyguladıktan sonra, testlerinizi sıralayabilir ve eski verilerin çalıştırmalar arasında temizleneceğinden ve yeni bir temel test yapılandırması kullandığınızdan emin olarak 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 veri aktarmanıza olanak tanır. Birim testlerinizde veya sürekli entegrasyon iş akışlarınızda kullanmak üzere bir temel veri kümesi tanımlayın ve ardından bunu ekiple paylaşmak üzere dışa aktarın.

firebase emulators:export ./dir

Testlerde, emülatör başlatıldığında referans verileri içe aktarın.

firebase emulators:start --import=./dir

Emülatöre, kapatma sırasında verileri dışa aktarmasını söyleyebilirsiniz. Bunun için bir dışa aktarma yolu belirtebilir veya --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 Local Emulator Suite tarafından sağlanan görselleştirme araçlarını ve raporları kullanabilirsiniz.

Kuralların değerlendirmelerini görselleştirme

Prototipinize güvenlik kuralları ekledikçe Local 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çık bir uç noktayı sorgulayın. Tarayıcıda açılabilen 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ı ifadeler ve alt ifadelere ayırır. Fareyle bu ifadelerin üzerine gelerek yürütme sayısı ve döndürülen değerler gibi daha fazla bilgi edinebilirsiniz. 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?