Подключите свое приложение и начните создавать прототипы


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

Создание прототипа и тестирование

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

Взаимодействие между базой данных Firebase и эмуляторами функций.
Эмуляторы баз данных и Cloud Functions входят в состав полного Local Emulator Suite .

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

После локальной инициализации проекта Firebase цикл разработки с использованием Local Emulator Suite обычно состоит из трех этапов:

  1. Прототипирование функций осуществляется в интерактивном режиме с помощью эмуляторов и Emulator Suite UI .

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

  3. Автоматизируйте свои тесты с помощью эмуляторов и пользовательских скриптов.

Локальная инициализация проекта Firebase.

Убедитесь, что вы установили CLI или обновили его до последней версии .

curl -sL firebase.tools | bash

Если вы еще этого не сделали, инициализируйте текущий рабочий каталог как проект Firebase, следуя подсказкам на экране, чтобы указать, используете ли вы Cloud Functions и либо Cloud Firestore , либо Realtime Database :

firebase init

Теперь в каталоге вашего проекта будут находиться файлы конфигурации Firebase, файл определения Firebase Security Rules для базы данных, каталог functions содержащий код облачных функций, и другие вспомогательные файлы.

Прототипирование в интерактивном режиме

Local Emulator Suite is designed to let you quickly prototype new features, and the Suite's built-in user interface is one of its most useful prototyping tools. It's a bit like having the Firebase console running locally.

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

Все это становится доступно при запуске Local Emulator Suite с помощью команды:

firebase emulators:start

Для создания прототипа нашего гипотетического приложения давайте настроим и протестируем базовую облачную функцию для изменения текстовых записей в базе данных, а также создадим и заполним эту базу данных в Emulator Suite UI для её запуска.

  1. Create a cloud function triggered by database writes by editing the functions/index.js file in your project directory. Replace the contents of the existing file with the following snippet. This function listens for changes to documents in the messages collection, converts the contents of a document's original field to uppercase, and stores the result in that document's uppercase field.
  2.   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});
          });
      
  3. Запустите Local Emulator Suite с помощью firebase emulators:start . Эмуляторы Cloud Functions и базы данных запустятся и будут автоматически настроены для взаимодействия.
  4. Просмотрите пользовательский интерфейс в браузере по http://localhost:4000 . Порт 4000 является портом по умолчанию для интерфейса, но проверьте сообщения терминала, выводимые CLI Firebase . Обратите внимание на статус доступных эмуляторов. В нашем случае будут запущены эмуляторы Cloud Functions и Cloud Firestore .
    Моё изображение
  5. В пользовательском интерфейсе на вкладке Firestore > Данные нажмите « Начать сбор данных » и следуйте инструкциям, чтобы создать новый документ в коллекции messages с именем поля original и значением test . Это запустит нашу облачную функцию. Обратите внимание, что вскоре появится новое поле, написанное uppercase , заполненное строкой «TEST».
    Моё изображениеМоё изображение
  6. На вкладке Firestore > Requests просмотрите запросы, отправленные в вашу эмулируемую базу данных, включая все проверки Firebase Security Rules , выполненные в рамках обработки этих запросов.
  7. Проверьте вкладку «Журналы» , чтобы убедиться, что ваша функция не столкнулась с ошибками при обновлении базы данных.

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

Подключите ваше приложение к эмуляторам.

Когда вы добьетесь значительного прогресса в интерактивном прототипировании и определитесь с дизайном, вы будете готовы добавить код доступа к базе данных в ваше приложение, используя соответствующий 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);
Быстрый
let settings = Firestore.firestore().settings
settings.host = "127.0.0.1:8080"
settings.cacheSettings = MemoryCacheSettings()
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

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);
}

Автоматизируйте свои тесты с помощью пользовательских скриптов.

Теперь перейдём к последнему общему этапу рабочего процесса. После того, как вы создали прототип своей функции в приложении и убедились, что она хорошо работает на всех платформах, можно переходить к окончательной реализации и тестированию. Для модульного тестирования и рабочих процессов CI вы можете запускать эмуляторы, выполнять скриптовые тесты и останавливать эмуляторы одним вызовом с помощью команды exec :

firebase emulators:exec "./testdir/test.sh"

Изучите отдельные эмуляторы более подробно.

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

Что дальше?

Обязательно ознакомьтесь с разделами, посвященными конкретным эмуляторам, ссылки на которые приведены выше. Затем: