Прежде чем приступить к работе с Firebase Local Emulator Suite , убедитесь, что вы создали проект Firebase, настроили среду разработки, а также выбрали и установили SDK Firebase для вашей платформы в соответствии с разделами «Начало работы с 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 предназначен для быстрого создания прототипов новых функций, а встроенный пользовательский интерфейс является одним из наиболее полезных инструментов для прототипирования. Это чем-то похоже на локальный запуск консоли 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 является портом по умолчанию для интерфейса, но проверьте сообщения терминала, выводимые CLI Firebase . Обратите внимание на статус доступных эмуляторов. В нашем случае будут запущены эмуляторы Cloud Functions и Realtime Database .

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


- Проверьте вкладку «Журналы» , чтобы убедиться, что ваша функция не выполнилась с ошибками во время обновления базы данных.
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); }
Автоматизируйте свои тесты с помощью пользовательских скриптов.
Теперь перейдём к последнему общему этапу рабочего процесса. После того, как вы создали прототип своей функции в приложении и убедились, что она хорошо работает на всех платформах, можно переходить к окончательной реализации и тестированию. Для модульного тестирования и рабочих процессов CI вы можете запускать эмуляторы, выполнять скриптовые тесты и останавливать эмуляторы одним вызовом с помощью команды 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 ) .