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

Перед подключением приложения к эмулятору 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 и живых ресурсов. К таким проектам обычно обращаются через codelabs или другие руководства.

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

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

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

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

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

Платформы Android, Apple и Web 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 .

Node.js 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);
Быстрый
// 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>

Что дальше?