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

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

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

Пакет локального эмулятора Firebase эмулирует продукты для одного проекта Firebase.

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

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

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

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

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

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

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

Демо

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

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

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

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

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

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

Android, iOS и веб-SDK

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

Android
        // 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);
iOS - Swift
    // In almost all cases the ns (namespace) is your project ID.
let db = Database.database(url:"http://localhost:9000?ns=YOUR_DATABASE_NAMESPACE")

Веб-версия 9

import { getDatabase, connectDatabaseEmulator } from "firebase/database";

const db = getDatabase();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  connectDatabaseEmulator(db, "localhost", 9000);
} 

Веб-версия 8

var db = firebase.database();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  db.useEmulator("localhost", 9000);
} 

Никаких дополнительных настроек не требуется для тестирования облачных функций , запускаемые Realtime базы данных событий с помощью эмулятора. Когда оба эмулятора Realtime Database и Cloud Functions работают, они автоматически работают вместе.

Административные SDK

В Firebase администратора SDKs автоматически подключаться к базе данных эмулятора в реальном времени , когда FIREBASE_DATABASE_EMULATOR_HOST переменная среды:

export FIREBASE_DATABASE_EMULATOR_HOST="localhost:9000"

Если ваш код выполняется внутри функции Cloud Эмулятор ваш идентификатор проекта и другая конфигурация будет автоматически устанавливается при вызове initalizeApp .

При подключении к эмулятору базы данных Realtime из любой другой среды вам нужно будет указать идентификатор проекта. Вы можете передать идентификатор проекта в initializeApp непосредственно или установить GCLOUD_PROJECT переменного окружение. Обратите внимание, что вам не нужно использовать ваш настоящий идентификатор проекта Firebase, эмулятор базы данных Realtime примет любой идентификатор проекта:

Административный SDK для Node.js
admin.initializeApp({ projectId: "your-project-id" });
Переменная среды
export GCLOUD_PROJECT="your-project-id"

Очистите базу данных между тестами

Чтобы очистить базу данных реального времени между действиями, вы можете очистить ссылку на базу данных. Вы можете использовать этот подход как альтернативу простому завершению процесса эмулятора.

Android
// With a DatabaseReference, write null to clear the database.
database.getReference().setValue(null);
iOS - Swift
// With a DatabaseReference, write nil to clear the database.
    Database.database().reference().setValue(nil);

Веб-версия 9

import { getDatabase, ref, set } from "firebase/database";

// With a database Reference, write null to clear the database.
const db = getDatabase();
set(ref(db), null);

Веб-версия 8

// With a database Reference, write null to clear the database.
firebase.database().ref().set(null);

Естественно, ваш код должен дождаться подтверждения того, что сброс завершен или завершился неудачно с использованием функций асинхронной обработки событий вашей платформы.

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

Импорт и экспорт данных

Эмуляторы базы данных и облачного хранилища позволяют экспортировать данные из запущенного экземпляра эмулятора. Определите базовый набор данных для использования в ваших модульных тестах или рабочих процессах непрерывной интеграции, а затем экспортируйте его для совместного использования в команде.

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>

Что дальше?