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

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

Прототип и тест

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

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

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

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

  1. Prototype работает в интерактивном режиме с эмуляторами и пользовательским интерфейсом Emulator Suite.

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

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

Локально инициализировать проект 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, чтобы активировать ее.

  1. Создайте облачную функцию, активируемую записью в базу данных, отредактировав файл functions/index.js в каталоге вашего проекта. Замените содержимое существующего файла следующим фрагментом. Эта функция прослушивает изменения узлов в иерархии messages , преобразует содержимое original свойства узла в верхний регистр и сохраняет результат в свойстве uppercase этого узла.
  2.   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);
          });
      
  3. Запустите Local Emulator Suite с помощью firebase emulators:start . Запускаются облачные функции и эмуляторы баз данных, автоматически настроенные для взаимодействия.
  4. Просмотрите пользовательский интерфейс в своем браузере по адресу http://localhost:4000 . Порт 4000 используется по умолчанию для пользовательского интерфейса, но проверьте сообщения терминала, выводимые интерфейсом командной строки Firebase. Обратите внимание на статус доступных эмуляторов. В нашем случае будут запущены эмуляторы Cloud Functions и Realtime Database.
    Мое изображение
  5. В пользовательском интерфейсе на вкладке База данных реального времени используйте элементы управления редактора содержимого базы данных, чтобы создать набор узлов с узлом messages , содержащим узел message1 , который, в свою очередь, содержит узел с ключом, установленным на original , и значением, установленным на test . Это запускает нашу облачную функцию. Обратите внимание, что вскоре появляется новое свойство uppercase со значением TEST .
    Мое изображениеМое изображение
  6. Проверьте вкладку «Журналы» , чтобы убедиться, что ваша функция не запускала ошибок при обновлении базы данных.

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

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

Когда вы добьетесь значительного прогресса в интерактивном прототипировании и определитесь с дизайном, вы будете готовы добавить код доступа к базе данных в свое приложение с помощью соответствующего пакета 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, в том числе о том, как их использовать для разработки приложений на стороне сервера:

Что дальше?

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