Прежде чем начать работу с Firebase Local Emulator Suite, убедитесь, что вы создали проект Firebase, настроили среду разработки, а также выбрали и установили Firebase SDK для своей платформы в соответствии с инструкциями в статье Начало работы с Firebase для Apple, Android или веб-сайтов.
Создание прототипа и тестирование
В Local Emulator Suite есть несколько эмуляторов, описанных в статье Знакомство с Firebase Local Emulator Suite. Вы можете создавать прототипы и тестировать их с помощью отдельных эмуляторов, а также комбинаций эмуляторов, в зависимости от того, какие продукты Firebase вы используете в рабочей среде.
Чтобы познакомить вас с рабочим процессом Local Emulator Suite, предположим, что вы работаете над приложением, в котором используется типичная комбинация продуктов: база данных Firebase и функции Cloud Functions, запускаемые операциями в этой базе данных.
После локальной инициализации проекта Firebase цикл разработки с использованием Local Emulator Suite обычно состоит из трех шагов:
Прототипируйте функции в интерактивном режиме с помощью эмуляторов и Emulator Suite UI.
Если вы используете эмулятор базы данных или эмулятор Cloud Functions, выполните однократное действие, чтобы подключить приложение к эмуляторам.
Автоматизируйте тестирование с помощью эмуляторов и собственных скриптов.
Как локально инициализировать проект Firebase
Установите интерфейс командной строки или обновите его до последней версии.
curl -sL firebase.tools | bashЕсли вы ещё этого не сделали, инициализируйте текущий рабочий каталог как проект Firebase, следуя инструкциям на экране, чтобы указать, что вы используете Cloud Functions и Cloud Firestore или Realtime Database:
firebase initТеперь в каталоге проекта будут файлы конфигурации Firebase, файл определения Firebase Security Rules для базы данных, каталог functions с кодом Cloud Functions и другие вспомогательные файлы.
Интерактивное прототипирование
Local Emulator Suite позволяет быстро создавать прототипы новых функций, и встроенный пользовательский интерфейс Suite – один из самых полезных инструментов для этого. Это похоже на локальный запуск консоли Firebase.
С помощью Emulator Suite UI вы можете выполнять итерации дизайна базы данных, пробовать разные потоки данных с использованием Cloud Functions, оценивать изменения правил безопасности, проверять журналы, чтобы подтвердить, как работают ваши серверные службы, и многое другое. Затем, если вы хотите начать заново, просто очистите базу данных и начните заново с новой идеей дизайна.
Все это доступно, если вы запустите Local Emulator Suite с помощью:
firebase emulators:startЧтобы создать прототип нашего гипотетического приложения, давайте настроим и протестируем базовую функцию Cloud Functions для изменения текстовых записей в базе данных, а также создадим и заполним эту базу данных в Emulator Suite UI, чтобы запустить ее.
- Создайте функцию Cloud Functions, которая будет активироваться при записи в базу данных. Для этого отредактируйте файл
functions/index.jsв каталоге проекта. Замените содержимое существующего файла следующим фрагментом. Эта функция отслеживает изменения в документах коллекцииmessages, преобразует содержимое поляoriginalдокумента в верхний регистр и сохраняет результат в полеuppercaseэтого документа. - Запустите Local Emulator Suite с помощью
firebase emulators:start. Эмуляторы Cloud Functions и базы данных запускаются и автоматически настраиваются для взаимодействия. - Откройте интерфейс в браузере по адресу
http://localhost:4000. Порт 4000 используется по умолчанию для интерфейса, но проверьте сообщения терминала, выводимые интерфейсом командной строки Firebase. Обратите внимание на статус доступных эмуляторов. В нашем случае будут запущены эмуляторы Cloud Functions и Cloud Firestore.
- В интерфейсе на вкладке Firestore > Данные нажмите Начать сбор и следуйте инструкциям, чтобы создать новый документ в коллекции
messagesс названием поляoriginalи значениемtest. Это активирует нашу функцию Cloud Functions. Через некоторое время появится новое полеuppercaseсо значением TEST.
- На вкладке Firestore > Requests (Firestore > Запросы) изучите запросы, отправленные в эмулированную базу данных, включая все оценки Firebase Security Rules, выполненные в рамках выполнения этих запросов.
- Проверьте вкладку Logs (Журналы), чтобы убедиться, что при обновлении базы данных не возникло ошибок.
const functions = require('firebase-functions/v1'); exports.makeUppercase = functions.firestore.document('/messages/{documentId}') .onCreate((snap, context) => { const original = snap.data().original; console.log('Uppercasing', context.params.documentId, original); const uppercase = original.toUpperCase(); return snap.ref.set({uppercase}, {merge: true}); });
Вы можете легко переключаться между кодом функции Cloud Functions и интерактивным редактированием базы данных, пока не получите нужный поток данных. При этом вам не придется изменять код доступа к базе данных в приложении, перекомпилировать и повторно запускать наборы тестов.
Подключите свое приложение к эмуляторам
Когда вы добьетесь хороших результатов с интерактивным прототипированием и определитесь с дизайном, вы будете готовы добавить код доступа к базе данных в свое приложение, используя соответствующий SDK. Вы продолжите использовать вкладку базы данных, а для функций – вкладку Журналы в Emulator Suite UI, чтобы убедиться, что приложение работает правильно.
Помните, что Local Emulator Suite – это инструмент для локальной разработки. Запись в рабочие базы данных не будет запускать функции, прототипы которых вы создаете локально.
Чтобы переключиться на запись данных в базу данных, вам нужно указать в тестовых классах или конфигурации приложения Cloud Firestore.
Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val firestore = Firebase.firestore firestore.useEmulator("10.0.2.2", 8080) firestore.firestoreSettings = firestoreSettings { isPersistenceEnabled = false }
Java
// 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);
Swift
let settings = Firestore.firestore().settings settings.host = "127.0.0.1:8080" settings.cacheSettings = MemoryCacheSettings() settings.isSSLEnabled = false Firestore.firestore().settings = settings
Unity
FirebaseFirestore db = FirebaseFirestore.DefaultInstance; // Connects to the Firestore Emulator running on port 8080 db.Settings.Host = "127.0.0.1:8080"; db.Settings.SslEnabled = false;
Web
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore"; // firebaseApps previously initialized using initializeApp() const db = getFirestore(); connectFirestoreEmulator(db, '127.0.0.1', 8080);
Web
// Firebase previously initialized using firebase.initializeApp(). var db = firebase.firestore(); if (location.hostname === "localhost") { db.useEmulator("127.0.0.1", 8080); }
Автоматизируйте тестирование с помощью собственных скриптов
Теперь перейдем к последнему шагу. Когда вы создадите прототип функции в приложении и он будет хорошо работать на всех платформах, можно переходить к окончательной реализации и тестированию. Для модульного тестирования и рабочих процессов непрерывной интеграции можно запустить эмуляторы, выполнить скриптовые тесты и завершить работу эмуляторов с помощью одной команды exec:
firebase emulators:exec "./testdir/test.sh"Подробнее об отдельных эмуляторах
Теперь, когда вы увидели, как выглядит базовый рабочий процесс на стороне клиента, вы можете продолжить изучение подробностей об отдельных эмуляторах в Suite, включая то, как использовать их для разработки серверных приложений:
- Добавьте эмулятор 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).