Прежде чем подключать приложение к эмулятору Realtime Database, убедитесь, что вы понимаете общий рабочий процесс Firebase Local Emulator Suite, установили и настроили Local Emulator Suite и изучили команды CLI.
Выберите проект Firebase
Firebase Local Emulator Suite эмулирует продукты для одного проекта Firebase.
Чтобы выбрать проект, перед запуском эмуляторов выполните в CLI команду firebase use в рабочем каталоге. или передавать флаг --project каждой команде эмулятора.
Local Emulator Suite поддерживает эмуляцию реальных и демонстрационных проектов Firebase.
| Тип проекта | Функции | Использование с эмуляторами |
|---|---|---|
| Реал |
Реальный проект Firebase – это проект, который вы создали и настроили (скорее всего, в консоли Firebase). В реальных проектах есть активные ресурсы, такие как экземпляры баз данных, сегменты хранилища, функции и другие ресурсы, настроенные для этого проекта Firebase. |
При работе с реальными проектами Firebase вы можете запускать эмуляторы для любого или всех поддерживаемых продуктов. Для всех продуктов, которые вы не эмулируете, ваши приложения и код будут взаимодействовать с активным ресурсом (экземпляром базы данных, сегментом хранилища, функцией и т. д.). |
| Демонстрация |
В демонстрационном проекте Firebase нет реальной конфигурации Firebase и активных ресурсов. Доступ к таким проектам обычно предоставляется через практические работы или другие учебные материалы. Идентификаторы демопроектов имеют префикс |
При работе с демонстрационными проектами Firebase ваши приложения и код взаимодействуют только с эмуляторами. Если приложение попытается взаимодействовать с ресурсом, для которого не запущен эмулятор, код не сработает. |
Рекомендуем по возможности использовать демопроекты. Преимущества подписки на Google One включают:
- Простая настройка, поскольку вы можете запускать эмуляторы, не создавая проект Firebase.
- Повышенная безопасность. Если ваш код случайно вызовет неэмулированные (рабочие) ресурсы, данные не будут изменены, а плата за использование не будет взиматься.
- Улучшенная поддержка офлайн-режима, поскольку для скачивания конфигурации SDK не требуется доступ к интернету.
Как настроить приложение для взаимодействия с эмуляторами
SDK для Android, платформ Apple и веб-приложений
Настройте конфигурацию в приложении или тестовые классы для взаимодействия с Realtime Database, как описано ниже.
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); }
Для тестирования функций Cloud Functions, активируемых событиями Realtime Database, с помощью эмулятора дополнительная настройка не требуется. Когда эмуляторы Realtime Database и Cloud Functions запущены, они автоматически работают вместе.
Admin SDK сек.
Firebase Admin SDK автоматически подключается к эмулятору Realtime Database, когда задана переменная среды FIREBASE_DATABASE_EMULATOR_HOST:
export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"
Если ваш код выполняется в эмуляторе Cloud Functions, идентификатор проекта и другие параметры будут автоматически заданы при вызове initializeApp.
Если вы хотите, чтобы код Admin SDK подключался к общему эмулятору, работающему в другой среде, вам нужно будет указать тот же идентификатор проекта, который вы задали с помощью интерфейса командной строки Firebase.
Вы можете передать идентификатор проекта напрямую в initializeApp или задать переменную среды GCLOUD_PROJECT.
Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
Переменная среды
export GCLOUD_PROJECT="your-project-id"
Очищайте базу данных между тестами
Чтобы очистить Realtime Database между действиями, можно удалить ссылку на базу данных. Этот подход можно использовать в качестве альтернативы простому завершению процесса эмулятора.
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);
Естественно, ваш код должен ожидать подтверждения того, что очистка завершена или не удалась, используя функции асинхронной обработки событий вашей платформы.
Реализовав такой шаг, вы можете упорядочить тесты и запустить функции с уверенностью, что старые данные будут удалены между запусками и вы используете новую базовую конфигурацию теста.
Как импортировать и экспортировать данные
Эмуляторы базы данных и Cloud Storage for Firebase позволяют экспортировать данные из запущенного экземпляра эмулятора. Определите базовый набор данных для использования в модульном тестировании или рабочих процессах непрерывной интеграции, а затем экспортируйте его, чтобы поделиться им с командой.
firebase emulators:export ./dirВ тестах при запуске эмулятора импортируйте базовые данные.
firebase emulators:start --import=./dirВы можете настроить эмулятор так, чтобы он экспортировал данные при завершении работы. Для этого укажите путь экспорта или просто используйте путь, переданный флагу --import.
firebase emulators:start --import=./dir --export-on-exitЭти параметры импорта и экспорта данных также работают с командой firebase emulators:exec. Дополнительную информацию можно найти в справочнике по командам эмулятора.
Визуализация активности правил безопасности
Работая над прототипом и циклами тестирования, вы можете использовать инструменты визуализации и отчёты, предоставляемые Local Emulator Suite.
Визуализация оценок правил
Добавляя правила безопасности в прототип, вы можете отлаживать их с помощью инструментов Local Emulator Suite.
После выполнения набора тестов вы можете посмотреть отчеты о покрытии тестами, в которых показано, как оценивалось каждое из ваших правил. Чтобы получить отчеты, отправьте запрос к конечной точке эмулятора, пока он работает. Чтобы открыть версию для браузера, перейдите по следующему URL:
http://localhost:9000/.inspect/coverage?ns=<database_name>
Правила будут разбиты на выражения и подвыражения. Наведите на них указатель мыши, чтобы увидеть дополнительную информацию, в том числе количество выполнений и возвращенные значения. Чтобы получить эти данные в формате JSON, добавьте в запрос следующий URL:
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
Что дальше?
- Чтобы посмотреть подборку видео и подробные инструкции, перейдите к плейлисту с обучающими видео по эмуляторам Firebase.
- Изучите расширенные варианты использования, связанные с тестированием правил безопасности и Firebase Test SDK: Тестирование правил безопасности (база данных Realtime Database).
- Поскольку триггерные функции – это типичная интеграция с Realtime Database, узнайте больше об эмуляторе Cloud Functions for Firebase в статье Локальный запуск функций.