Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

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

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

Прототип и испытание

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

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

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

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

Все это доступно, если вы запустите Local Emulator Suite с:

firebase emulators:start

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

  1. Создайте облачную функцию, запускаемую functions/index.js в базу данных, отредактировав файл 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 щелкните Начать сбор и следуйте инструкциям по созданию нового документа в коллекции messages с original именем поля и test значения. Это запускает нашу облачную функцию. Обратите внимание, что вскоре появится новое поле в uppercase , заполненное строкой «ТЕСТ».
    Мой образМой образ
  6. Проверьте вкладку Журналы, чтобы убедиться, что ваша функция не вызвала ошибок при обновлении базы данных.

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

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

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

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

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

Android
        // 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);
iOS - Swift
let settings = Firestore.firestore().settings
settings.host = "localhost:8080"
settings.isPersistenceEnabled = false 
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Интернет v8

// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 8080);
}

Интернет v9

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

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
useFirestoreEmulator(db, 'localhost', 8080);
Интернет
// Initialize your Web app as described in the Get started for Web
// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 8080);
}

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

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

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

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

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

Что дальше?

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