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

В этом разделе, чтобы представить рабочий процесс Local Emulator Suite, давайте предположим, что вы работаете над приложением, которое использует типичное сочетание продуктов: базу данных Firebase и облачные функции, запускаемые операциями в этой базе данных.
После локальной инициализации проекта Firebase цикл разработки с использованием Local Emulator Suite обычно состоит из трех этапов:
Prototype работает в интерактивном режиме с эмуляторами и пользовательским интерфейсом Emulator Suite.
Если вы используете эмулятор базы данных или эмулятор облачных функций, выполните однократное действие, чтобы подключить свое приложение к эмуляторам.
Автоматизируйте свои тесты с помощью эмуляторов и пользовательских скриптов.
Локально инициализировать проект Firebase
Убедитесь, что вы установили CLI или обновили его до последней версии .
curl -sL firebase.tools | bash
Если вы еще этого не сделали, инициализируйте текущий рабочий каталог как проект Firebase, следуя инструкциям на экране, чтобы указать, что вы используете облачные функции и либо Cloud Firestore , либо базу данных реального времени :
firebase init
Каталог вашего проекта теперь будет содержать файлы конфигурации Firebase, файл определения правил безопасности Firebase для базы данных, каталог functions
, содержащий код облачных функций, и другие вспомогательные файлы.
Прототип в интерактивном режиме
Local Emulator Suite позволяет быстро создавать прототипы новых функций, а встроенный пользовательский интерфейс пакета — один из самых полезных инструментов для создания прототипов. Это немного похоже на локальную работу консоли Firebase.
Используя пользовательский интерфейс Emulator Suite, вы можете повторить дизайн базы данных, опробовать различные потоки данных, включающие облачные функции, оценить изменения правил безопасности, проверить журналы, чтобы убедиться, как работают ваши серверные службы, и многое другое. Затем, если вы хотите начать все сначала, просто очистите базу данных и начните заново с новой дизайнерской идеей.
Все это доступно при запуске Local Emulator Suite с помощью:
firebase emulators:start
Чтобы создать прототип нашего гипотетического приложения, давайте настроим и протестируем базовую облачную функцию для изменения текстовых записей в базе данных, а также создадим и заполним эту базу данных в пользовательском интерфейсе Emulator Suite, чтобы активировать ее.
- Создайте облачную функцию, активируемую записью в базу данных, отредактировав файл
functions/index.js
в каталоге вашего проекта. Замените содержимое существующего файла следующим фрагментом. Эта функция прослушивает изменения узлов в иерархииmessages
, преобразует содержимоеoriginal
свойства узла в верхний регистр и сохраняет результат в свойствеuppercase
этого узла. - Запустите Local Emulator Suite с помощью
firebase emulators:start
. Запускаются облачные функции и эмуляторы баз данных, автоматически настроенные для взаимодействия. - Просмотрите пользовательский интерфейс в своем браузере по адресу
http://localhost:4000
. Порт 4000 используется по умолчанию для пользовательского интерфейса, но проверьте сообщения терминала, выводимые интерфейсом командной строки Firebase. Обратите внимание на статус доступных эмуляторов. В нашем случае будут запущены эмуляторы Cloud Functions и Realtime Database.
- В пользовательском интерфейсе на вкладке База данных реального времени используйте элементы управления редактора содержимого базы данных, чтобы создать набор узлов с узлом
messages
, содержащим узелmessage1
, который, в свою очередь, содержит узел с ключом, установленным наoriginal
, и значением, установленным наtest
. Это запускает нашу облачную функцию. Обратите внимание, что вскоре появляется новое свойствоuppercase
со значениемTEST
.
- Проверьте вкладку «Журналы» , чтобы убедиться, что ваша функция не запускала ошибок при обновлении базы данных.
const functions = require('firebase-functions'); 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, чтобы убедиться, что ваше приложение работает правильно.
Помните, что Local Emulator Suite — это локальный инструмент разработки. Записи в ваши производственные базы данных не будут запускать функции, которые вы прототипируете локально.
Чтобы переключиться на то, чтобы ваше приложение выполняло запись в базу данных, вам нужно указать свои тестовые классы или конфигурацию в приложении на эмуляторе базы данных реального времени.
Kotlin+KTX
// 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 modular API
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 namespaced API
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"
Изучите отдельные эмуляторы более подробно
Теперь, когда вы увидели, как выглядит базовый рабочий процесс на стороне клиента, вы можете продолжить с подробностями об отдельных эмуляторах в Suite, в том числе о том, как их использовать для разработки приложений на стороне сервера:
- Добавьте эмулятор аутентификации в свои рабочие процессы прототипирования.
- Узнайте больше о функциях эмулятора базы данных реального времени
- Подробно о функциях эмулятора Cloud Storage для Firebase
- Подробнее о функциях эмулятора Cloud Firestore
- Подключите свое приложение к эмулятору Cloud Functions
- Оцените Firebase Extensions, минимизировав расходы на выставление счетов с помощью эмулятора Extensions
Что дальше?
Обязательно прочитайте темы, связанные с конкретными эмуляторами, указанные выше. Затем:
- Подборку видеороликов и подробных практических примеров смотрите в учебном плейлисте Firebase Emulators .
- Изучите расширенные варианты использования, включающие тестирование правил безопасности и Firebase Test SDK: тестирование правил безопасности (Cloud Firestore) , тестирование правил безопасности (база данных в реальном времени) и тестирование правил безопасности (облачное хранилище для Firebase) .