Прежде чем приступить к работе с Firebase Local Emulator Suite , убедитесь, что вы создали проект Firebase, настроили среду разработки, а также выбрали и установили Firebase SDK для своей платформы в соответствии с разделами Начало работы с Firebase для вашей платформы: Apple , Android или Web .
Прототип и тест
В Local Emulator Suite входит несколько эмуляторов продуктов, как описано в разделе «Введение в Firebase Local Emulator Suite . Вы можете создавать прототипы и тестировать их как с помощью отдельных эмуляторов, так и с помощью их комбинаций, в зависимости от используемых вами продуктов Firebase.

В этой теме, чтобы представить рабочий процесс Local Emulator Suite , предположим, что вы работаете над приложением, которое использует типичную комбинацию продуктов: базу данных Firebase и облачные функции, запускаемые операциями в этой базе данных.
После локальной инициализации проекта Firebase цикл разработки с использованием Local Emulator Suite обычно будет состоять из трех этапов:
Прототип интерактивно взаимодействует с эмуляторами и Emulator Suite UI .
Если вы используете эмулятор базы данных или эмулятор Cloud Functions , выполните однократное действие, чтобы подключить свое приложение к эмуляторам.
Автоматизируйте свои тесты с помощью эмуляторов и пользовательских скриптов.
Локальная инициализация проекта Firebase
Обязательно установите CLI или обновите его до последней версии .
curl -sL firebase.tools | bashЕсли вы еще этого не сделали, инициализируйте текущий рабочий каталог как проект Firebase, следуя инструкциям на экране, чтобы указать, что вы используете Cloud Functions и либо Cloud Firestore , либо Realtime Database :
firebase init Каталог вашего проекта теперь будет содержать файлы конфигурации Firebase, файл определения Firebase Security Rules для базы данных, каталог functions , содержащий код облачных функций, и другие вспомогательные файлы.
Прототип интерактивно
Local Emulator Suite разработан для быстрого создания прототипов новых функций, а встроенный пользовательский интерфейс Suite — один из самых полезных инструментов для создания прототипов. Это немного похоже на запуск локальной консоли Firebase .
Используя Emulator Suite UI , вы можете итеративно изменять структуру базы данных, тестировать различные потоки данных, включающие облачные функции, оценивать изменения правил безопасности, проверять журналы для подтверждения работоспособности внутренних служб и многое другое. Если же вы захотите начать всё заново, просто очистите базу данных и начните с новой идеи дизайна.
Все это доступно при запуске Local Emulator Suite с помощью:
firebase emulators:startЧтобы создать прототип нашего гипотетического приложения, давайте настроим и протестируем базовую облачную функцию для изменения текстовых записей в базе данных, а также создадим и заполним эту базу данных в Emulator Suite UI для ее запуска.
- Создайте облачную функцию, активируемую записью в базу данных, отредактировав файл
functions/index.jsв каталоге проекта. Замените содержимое существующего файла следующим фрагментом кода. Эта функция отслеживает изменения узлов в иерархииmessages, преобразует содержимоеoriginalсвойства узла в верхний регистр и сохраняет результат в свойствеuppercaseэтого узла. - Запустите Local Emulator Suite с помощью
firebase emulators:start. Cloud Functions и эмуляторы баз данных запускаются автоматически и настраиваются для взаимодействия. - Откройте пользовательский интерфейс в браузере по адресу
http://localhost:4000. Порт 4000 используется по умолчанию для пользовательского интерфейса, но проверьте сообщения терминала, выводимые Firebase CLI. Обратите внимание на состояние доступных эмуляторов. В нашем случае будут запущены эмуляторы Cloud Functions и Realtime Database .

- В пользовательском интерфейсе на вкладке « База данных реального времени» с помощью элементов управления редактора содержимого базы данных создайте набор узлов, включающий узел
messages, содержащий узелmessage1, который, в свою очередь, содержит узел с ключомoriginalи значениемtest. Это активирует нашу облачную функцию. Обратите внимание, что вскоре появится новое свойствоuppercaseи значениемTEST.


- Проверьте вкладку «Журналы» , чтобы убедиться, что ваша функция не вызвала ошибок inot при обновлении базы данных.
const functions = require('firebase-functions/v1'); exports.makeUppercase = functions.database.ref('/messages/{pushId}/original') .onCreate((snapshot, context) => { const original = snapshot.val(); console.log('Uppercasing', context.params.pushId, original); const uppercase = original.toUpperCase(); return snapshot.ref.parent.child('uppercase').set(uppercase); });
Вы можете легко переключаться между кодом облачной функции и интерактивными правками базы данных, пока не получите нужный поток данных, без необходимости в коде доступа к базе данных в приложении, повторной компиляции и повторном запуске тестовых наборов.
Подключите свое приложение к эмуляторам
Добившись значительного прогресса в интерактивном прототипировании и определившись с дизайном, вы будете готовы добавить код доступа к базе данных в своё приложение, используя соответствующий SDK. Вам нужно будет продолжать использовать вкладку «База данных» и, для функций, вкладку «Журналы» в Emulator Suite UI чтобы убедиться в корректности поведения вашего приложения.
Помните, что Local Emulator Suite — это локальный инструмент разработки. Запись данных в ваши рабочие базы данных не будет запускать функции, прототипы которых вы разрабатываете локально.
Чтобы переключить приложение на запись данных в базу данных, вам необходимо указать тестовые классы или конфигурацию приложения на эмуляторе 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); }
Автоматизируйте свои тесты с помощью пользовательских скриптов
Теперь последний этап общего рабочего процесса. После того, как вы создали прототип функции в приложении и она выглядит многообещающе на всех платформах, можно приступать к финальной реализации и тестированию. Для модульного тестирования и непрерывной интеграции вы можете запускать эмуляторы, выполнять скриптовые тесты и завершать работу эмуляторов одним вызовом с помощью команды exec :
firebase emulators:exec "./testdir/test.sh"Изучите отдельные эмуляторы более подробно
Теперь, когда вы увидели, как выглядит базовый рабочий процесс на стороне клиента, вы можете перейти к подробностям отдельных эмуляторов в наборе, в том числе к тому, как использовать их для разработки приложений на стороне сервера:
- Добавьте эмулятор Authentication в ваши рабочие процессы прототипирования
- Подробно о возможностях эмулятора Realtime Database
- Подробно о функциях эмулятора Cloud Storage for Firebase
- Подробно о возможностях эмулятора Cloud Firestore
- Подключите свое приложение к эмулятору Cloud Functions
- Оцените возможности Firebase Extensions , минимизируя расходы на оплату с помощью эмулятора Extensions
Что дальше?
Обязательно ознакомьтесь с темами, связанными с конкретными эмуляторами, ссылка на которые приведена выше. Затем:
- Подборку видеороликов и подробные практические примеры смотрите в обучающем плейлисте по работе с эмуляторами Firebase .
- Изучите расширенные варианты использования, включающие тестирование правил безопасности и Firebase Test SDK: Тестовые правила безопасности ( Cloud Firestore ) , Тестовые правила безопасности ( Realtime Database ) и Тестовые правила безопасности ( Cloud Storage for Firebase ) .