Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

Прежде чем приступить к работе с 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.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 . Запускаются облачные функции и эмуляторы баз данных, автоматически настроенные для взаимодействия.
  4. Просмотрите пользовательский интерфейс в своем браузере по адресу http://localhost:4000 . Порт 4000 используется по умолчанию для пользовательского интерфейса, но проверьте сообщения терминала, выводимые интерфейсом командной строки Firebase. Обратите внимание на статус доступных эмуляторов. В нашем случае будут запущены эмуляторы Cloud Functions и Cloud Firestore.
    Мое изображение
  5. В пользовательском интерфейсе на вкладке Firestore > Data нажмите Start collection и следуйте инструкциям, чтобы создать новый документ в коллекции messages с fieldname original и значением test . Это запускает нашу облачную функцию. Обратите внимание, что вскоре появится новое поле uppercase , заполненное строкой «TEST».
    Мое изображениеМое изображение
  6. На вкладке Firestore > Requests изучите запросы к вашей эмулируемой базе данных, включая все оценки правил безопасности Firebase, выполненные в рамках выполнения этих запросов.
  7. Проверьте вкладку «Журналы» , чтобы убедиться, что ваша функция не столкнулась с ошибками при обновлении базы данных.

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

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

Когда вы добьетесь значительного прогресса в интерактивном прототипировании и определитесь с дизайном, вы будете готовы добавить код доступа к базе данных в свое приложение с помощью соответствующего пакета SDK. Вы продолжите использовать вкладку базы данных и, для функций, вкладку «Журналы» в пользовательском интерфейсе Emulator Suite, чтобы убедиться, что ваше приложение работает правильно.

Помните, что Local Emulator Suite — это локальный инструмент разработки. Записи в ваши производственные базы данных не будут запускать функции, которые вы прототипируете локально.

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

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 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.isPersistenceEnabled = false 
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Web modular API

import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, '127.0.0.1', 8080);

Web namespaced API

// 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"

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

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

Что дальше?

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