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

База данных


Прежде чем приступить к работе с Firebase Local Emulator Suite , убедитесь, что вы создали проект Firebase, настроили среду разработки, а также выбрали и установили Firebase SDK для своей платформы в соответствии с разделами Начало работы с 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 разработан для быстрого создания прототипов новых функций, а встроенный пользовательский интерфейс Suite — один из самых полезных инструментов для создания прототипов. Это немного похоже на запуск локальной консоли Firebase .

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

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

firebase emulators:start

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

  1. Создайте облачную функцию, активируемую записью в базу данных, отредактировав файл functions/index.js в каталоге проекта. Замените содержимое существующего файла следующим фрагментом кода. Эта функция отслеживает изменения документов в коллекции messages , преобразует содержимое original поля документа в верхний регистр и сохраняет результат в поле документа uppercase .
  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 используется по умолчанию для пользовательского интерфейса, но проверьте сообщения терминала, выводимые Firebase CLI. Обратите внимание на состояние доступных эмуляторов. В нашем случае будут запущены эмуляторы Cloud Functions и Cloud Firestore .
    Мой образ
  5. В пользовательском интерфейсе на вкладке Firestore > Данные нажмите «Начать сбор» и следуйте инструкциям, чтобы создать новый документ в коллекции messages с именем поля original и значением test . Это активирует нашу облачную функцию. Обратите внимание, что вскоре появится новое поле uppercase , заполненное строкой «TEST».
    Мой образМой образ
  6. На вкладке Firestore > Запросы проверьте запросы, сделанные в эмулируемой базе данных, включая все оценки 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);
}

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

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

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

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

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

Что дальше?

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