Подключите свое приложение к эмулятору базы данных реального времени.

Перед подключением приложения к эмулятору Realtime Database убедитесь, что вы понимаете общий рабочий процесс Firebase Local Emulator Suite , а также что вы установили и настроили Local Emulator Suite и ознакомились с его командами CLI .

Выберите проект Firebase

Firebase Local Emulator Suite эмулирует продукты для одного проекта Firebase.

Чтобы выбрать проект, перед запуском эмуляторов выполните в командной строке firebase use в вашем рабочем каталоге. Или передайте флаг --project каждой команде эмулятора.

Local Emulator Suite поддерживает эмуляцию реальных проектов Firebase и демонстрационных проектов.

Тип проекта Функции Использование с эмуляторами
Настоящий

Настоящий проект Firebase — это проект, который вы создали и настроили (скорее всего, через консоль Firebase ).

Реальные проекты имеют активные ресурсы, такие как экземпляры базы данных, сегменты хранения, функции или любые другие ресурсы, которые вы настраиваете для этого проекта Firebase.

Работая с реальными проектами Firebase, вы можете запускать эмуляторы для любого или всех поддерживаемых продуктов.

Для любых продуктов, которые вы не эмулируете, ваши приложения и код будут взаимодействовать с реальным ресурсом (экземпляром базы данных, контейнером хранилища, функцией и т. д.).

Демо

Демонстрационный проект Firebase не имеет реальной конфигурации Firebase и активных ресурсов. Доступ к таким проектам обычно осуществляется через практическое руководство или другие обучающие материалы.

Идентификаторы демонстрационных проектов имеют префикс demo- .

При работе с демонстрационными проектами Firebase ваши приложения и код взаимодействуют только с эмуляторами. Если ваше приложение попытается взаимодействовать с ресурсом, для которого не запущен эмулятор, этот код завершится ошибкой.

Мы рекомендуем использовать демо-проекты везде, где это возможно. Преимущества включают:

  • Более простая настройка, поскольку вы можете запускать эмуляторы, не создавая проект Firebase.
  • Более высокий уровень безопасности, поскольку если ваш код случайно вызовет неэмулируемые (производственные) ресурсы, то не возникнет риска изменения данных, использования и выставления счетов.
  • Лучшая поддержка в режиме офлайн, поскольку для загрузки конфигурации SDK не требуется доступ в Интернет.

Настройте свое приложение для взаимодействия с эмуляторами

Платформы Android, Apple и веб-SDK

Настройте конфигурацию вашего приложения или тестовые классы для взаимодействия с 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);
Быстрый
    // 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, с помощью эмулятора не требуется дополнительная настройка. Когда эмуляторы Realtime Database и Cloud Functions запущены одновременно, они автоматически работают вместе.

Admin SDK s

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 CLI . Вы можете передать идентификатор проекта непосредственно в initializeApp или задать переменную среды GCLOUD_PROJECT .

SDK администратора Node.js
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);
Быстрый
// 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>

Что дальше?