Uygulamanızı Realtime Database emülatörüne bağlamadan önce Firebase Local Emulator Suite iş akışını genel olarak anladığınızdan, Local Emulator Suite'yi yüklediğinizden ve yapılandırdığınızdan ve CLI komutlarını incelediğinizden emin olun.
Firebase projesi seçme
Firebase Local Emulator Suite, tek bir Firebase projesinin ürünlerini taklit eder.
Kullanılacak projeyi seçmek için emülatörleri başlatmadan önce CLI'de çalışma dizininizde firebase use
komutunu çalıştırın. Alternatif olarak, her emülatör komutuna --project
işaretini de iletebilirsiniz.
Local Emulator Suite, gerçek Firebase projelerinin ve demo projelerinin emülasyonunu destekler.
Proje türü | Özellikler | Emülatörlerle kullanma |
---|---|---|
Gerçek |
Gerçek Firebase projesi, oluşturduğunuz ve yapılandırdığınız (muhtemelen Firebase konsolu üzerinden) projedir. Gerçek projelerde veritabanı örnekleri, depolama alanı paketleri, işlevler veya söz konusu 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ör çalıştırabilirsiniz. Emülasyon oluşturmadığınız ürünlerde uygulamalarınız ve kodunuz canlı kaynakla (veritabanı örneği, depolama alanı paketi, işlev vb.) etkileşim kurar. |
Demo |
Demo Firebase projelerinde gerçek Firebase yapılandırması ve canlı kaynak bulunmaz. Bu projelere genellikle codelab'ler veya diğer eğitici içerikler üzerinden erişilir. Demo projelerin proje kimliklerinde |
Demo Firebase projeleriyle çalışırken uygulamalarınız ve kodunuz yalnızca emülatörlerle etkileşim kurar. Uygulamanız, emülatörünün çalışmadığı bir kaynağa etkileşime geçmeye ç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ırabileceğiniz için daha kolay kurulum
- Kodunuz yanlışlıkla taklit edilmeyen (ü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.
Uygulamanızı, emülatörlerle konuşacak şekilde donatma
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+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); }
Emülatör kullanarak Realtime Database etkinlikleri tarafından tetiklenen Cloud Functions'ı test etmek için ek kurulum gerekmez. Hem Realtime Database hem de 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'ler otomatik olarak Realtime Database emülatörüne 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ılırken 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'yi kullanarak ayarladığınız proje kimliğini belirtmeniz gerekir.
Proje kimliğini doğrudan initializeApp
işlevine 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
Etkinlikler arasında Realtime Database öğesini temizlemek için veritabanı referansını temizleyebilirsiniz. Bu yaklaşımı, emülatör sürecini kapatmanın alternatifi 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 platformunuzun asenkron etkinlik işleme özelliklerini kullanarak temizlemenin tamamlandığı veya başarısız olduğuyla ilgili onay beklemelidir.
Bu tür bir adım uyguladıktan sonra, testlerinizi sıralayabilir ve işlevlerinizi tetikleyebilirsiniz. Bu durumda, eski verilerin çalıştırmalar arasında temizleneceğinden ve yeni bir temel test yapılandırması kullandığınızdan emin olabilirsiniz.
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 dışa aktarmanıza olanak tanır. Birim testlerinizde veya sürekli entegrasyon iş akışlarınızda kullanılacak bir referans veri kümesi tanımlayın ve ardından ekip arasında paylaşılmak üzere dışa aktarın.
firebase emulators:export ./dir
Testlerde, emülatör başlatılırken temel verileri içe aktarın.
firebase emulators:start --import=./dir
Bir dışa aktarma yolu belirterek veya --import
işaretçisine iletilen yolu kullanarak, kapatma sırasında verileri dışa aktarması için emülatöre talimat verebilirsiniz.
firebase emulators:start --import=./dir --export-on-exit
Bu veri içe aktarma ve dışa aktarma seçenekleri firebase emulators:exec
komutuyla da çalışır. Daha fazla bilgi için emülatör komut referansı bölümüne bakın.
Güvenlik kuralları etkinliğini görselleştirme
Prototip ve test döngülerinde çalışırken Local Emulator Suite tarafından sağlanan görselleştirme araçlarını ve raporları kullanabilirsiniz.
Kural değerlendirmelerini görselleştirme
Güvenlik kurallarını prototipinize eklerken Local Emulator Suite araçlarıyla hata ayıklama yapabilirsiniz.
Bir test paketi ç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ı 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. Fareyle üzerine geldiğinizde, çalıştırma 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?
- Seçili videolar ve ayrıntılı "Nasıl Yapılır?" örnekleri için Firebase Emulators Eğitimi Oynatma Listesi'ni takip edin.
- Güvenlik Kuralları testini ve Firebase Test SDK'sını içeren gelişmiş kullanım alanlarını inceleyin: Güvenlik kurallarını test etme (Realtime Database).
- Tetikleyici işlevler, Realtime Database ile tipik bir entegrasyon olduğundan İşlevleri yerel olarak çalıştırma başlıklı makalede Cloud Functions for Firebase emülatör hakkında daha fazla bilgi edinin.