Catch up on everthing we announced at this year's Firebase Summit. Learn more

Подключите свое приложение к эмулятору Cloud Firestore

Перед подключением вашего приложения к эмулятору Cloud Firestore, убедитесь , что вы понимаете общий рабочий процесс 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, Apple и веб-SDK

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

Android
        // 10.0.2.2 is the special IP address to connect to the 'localhost' of
        // the host computer from an Android emulator.
        FirebaseFirestore firestore = FirebaseFirestore.getInstance();
        firestore.useEmulator("10.0.2.2", 8080);

        FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
                .setPersistenceEnabled(false)
                .build();
        firestore.setFirestoreSettings(settings);
Быстрый
let settings = Firestore.firestore().settings
settings.host = "localhost:8080"
settings.isPersistenceEnabled = false 
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Веб-версия 9

import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, 'localhost', 8080);

Веб-версия 8

// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 8080);
}
Интернет
// Initialize your Web app as described in the Get started for Web
// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 8080);
}

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

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

В Firebase администратор SDKs автоматически подключаться к эмулятору Cloud Firestore когда FIRESTORE_EMULATOR_HOST переменной среды:

export FIRESTORE_EMULATOR_HOST="localhost:8080"

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

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

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

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

Production Firestore не предоставляет метод SDK платформы для очистки базы данных, но эмулятор Firestore предоставляет вам конечную точку REST специально для этой цели, которую можно вызвать из этапа настройки / tearDown тестовой среды, из тестового класса или из оболочки (например, , с curl ) до того, как тест начался. Вы можете использовать этот подход как альтернативу простому завершению процесса эмулятора.

В соответствующем способе, выполнить операцию удаления HTTP, подачи вашего Firebase ProjectID, например firestore-emulator-example , к следующей конечной точке:

"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

Естественно, ваш код должен ожидать подтверждения REST о том, что очистка завершена или не удалась.

Вы можете выполнить эту операцию из оболочки:

// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

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

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

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

firebase emulators:export ./dir

В тестах при запуске эмулятора импортируйте базовые данные.

firebase emulators:start --import=./dir

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

firebase emulators:start --import=./dir --export-on-exit

Этот импорт и экспорт данных вариантов работа с firebase emulators:exec команды , а также. Более подробную информацию , обратитесь к ссылке команды эмулятора .

Визуализируйте действие правил безопасности

Работая с прототипами и циклами тестирования, вы можете использовать инструменты визуализации и отчеты, предоставляемые Local Emulator Suite.

Используйте монитор запросов

Эмулятор Cloud Firestore позволяет визуализировать клиентские запросы в пользовательском интерфейсе Emulator Suite, включая оценочную трассировку для правил безопасности Firebase.

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

Монитор запросов эмулятора Firestore, показывающий оценки правил безопасности

Визуализировать отчеты об оценке правил

Добавляя правила безопасности в свой прототип, вы можете отлаживать их с помощью инструментов отладки Local Emulator Suite.

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

Чтобы получить отчеты, запросите открытую конечную точку на эмуляторе во время его работы. Для версии, удобной для браузера, используйте следующий URL-адрес:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

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

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage

Здесь HTML-версия отчета выделяет оценки, которые приводят к неопределенным ошибкам и ошибкам с нулевым значением:

Чем эмулятор Cloud Firestore отличается от продакшена

Эмулятор Cloud Firestore пытается точно воспроизвести поведение производственной службы с некоторыми заметными ограничениями.

Сделки

Эмулятор в настоящее время не реализует все поведение транзакций, наблюдаемое в производственной среде. Когда вы тестируете функции, которые включают несколько одновременных операций записи в один документ, эмулятор может медленно выполнять запросы на запись. В некоторых случаях снятие блокировки может занять до 30 секунд. При необходимости рассмотрите возможность соответствующей корректировки тайм-аутов тестирования.

Индексы

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

Пределы

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

Что дальше?