В состав Firebase CLI входит эмулятор Cloud Functions , который может эмулировать следующие типы функций:
- функции HTTPS
- Вызываемые функции
- Функции очереди задач
- Фоновые функции запускаются из Firebase Authentication , Realtime Database , Cloud Firestore , Cloud Storage , поддерживаемых оповещений Firebase и Cloud Pub/Sub.
Вы можете запускать функции локально, чтобы протестировать их перед развертыванием в рабочей среде.
Установите Firebase CLI.
Для использования эмулятора Cloud Functions сначала установите Firebase CLI:
npm install -g firebase-tools
Для использования локального эмулятора ваши Cloud Functions должны зависеть от следующих компонентов:
-
firebase-adminверсии8.0.0или выше. -
firebase-functionsверсии3.0.0или выше.
Настройка учетных данных администратора (необязательно)
Если вы хотите, чтобы ваши функциональные тесты взаимодействовали с API Google или другими API Firebase через Firebase Admin SDK , вам может потребоваться настроить учетные данные администратора.
- Триггеры Cloud Firestore и Realtime Database уже имеют достаточные учетные данные и не требуют дополнительной настройки.
- Для всех остальных API, включая API Firebase, такие как Authentication и FCM , или API Google, такие как Cloud Translation или Cloud Speech, требуются шаги настройки, описанные в этом разделе. Это относится как к использованию оболочки Cloud Functions так и
firebase emulators:start.
Для настройки учетных данных администратора для эмулируемых функций:
- Откройте панель «Учетные записи служб» в консоли Google Cloud .
- Убедитесь, что выбрана учетная запись службы App Engine по умолчанию , и воспользуйтесь меню параметров справа, чтобы выбрать «Создать ключ» .
- При появлении запроса выберите JSON в качестве типа ключа и нажмите «Создать» .
Настройте учетные данные Google по умолчанию так, чтобы они указывали на загруженный ключ:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase emulators:start
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase emulators:start
После выполнения этих шагов ваши функциональные тесты смогут получить доступ к API Firebase и Google, используя Admin SDK . Например, при тестировании триггера Authentication эмулируемая функция может вызвать admin.auth().getUserByEmail(email) .
Настройка конфигурации функций (необязательно)
Если вы используете пользовательские переменные конфигурации функций, сначала выполните команду для получения вашей пользовательской конфигурации (выполните её в каталоге functions ) в вашей локальной среде:
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
Запустите набор эмуляторов.
Для запуска эмулятора Cloud Functions используйте команду emulators:start :
firebase emulators:start
Команда emulators:start запустит эмуляторы для Cloud Functions , Cloud Firestore, Realtime Database и Firebase Hosting на основе продуктов, инициализированных в вашем локальном проекте с помощью firebase init . Если вы хотите запустить конкретный эмулятор, используйте флаг --only :
firebase emulators:start --only functions
Если вы хотите запустить набор тестов или скрипт тестирования после запуска эмуляторов, используйте команду emulators:exec :
firebase emulators:exec "./my-test.sh"
Настройте ваше приложение для взаимодействия с эмуляторами.
Для обеспечения взаимодействия вашего приложения с эмуляторами может потребоваться дополнительная настройка.
Обеспечьте наличие вызываемых функций в вашем приложении.
Если в процессе создания прототипа и тестирования используются вызываемые функции бэкэнда , настройте взаимодействие с эмулятором Cloud Functions for Firebase следующим образом:
Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val functions = Firebase.functions functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFunctions functions = FirebaseFunctions.getInstance(); functions.useEmulator("10.0.2.2", 5001);
Быстрый
Functions.functions().useEmulator(withHost: "localhost", port: 5001)
Web
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "127.0.0.1", 5001);
Web
firebase.functions().useEmulator("127.0.0.1", 5001);
Добавьте в ваше приложение инструменты для эмуляции функций HTTPS.
Каждая функция HTTPS в вашем коде будет обслуживаться локальным эмулятором с использованием следующего формата URL:
http:// $HOST : $PORT / $PROJECT / $REGION / $NAME
Например, простая функция helloWorld с портом и регионом хоста по умолчанию будет доступна по адресу:
https://localhost:5001/ $PROJECT /us-central1/helloWorld
Оптимизируйте ваше приложение для эмуляции функций очереди задач.
Эмулятор автоматически настраивает очереди эмулируемых задач на основе определений триггеров, а Admin SDK перенаправляет запросы из очереди в эмулятор, если обнаруживает его работу с помощью переменной среды CLOUD_TASKS_EMULATOR_HOST .
Обратите внимание, что система диспетчеризации, используемая в производственной среде, сложнее, чем та, что реализована в эмуляторе, поэтому не следует ожидать, что эмулируемое поведение будет точно соответствовать производственной среде. Параметры в эмуляторе устанавливают верхние пределы скорости диспетчеризации и повторной попытки выполнения задач.
Оптимизируйте ваше приложение для эмуляции функций, запускаемых в фоновом режиме.
Эмулятор Cloud Functions поддерживает функции, запускаемые в фоновом режиме из следующих источников:
- Эмулятор Realtime Database
- Эмулятор Cloud Firestore
- Эмулятор Authentication
- Эмулятор Pub/Sub
- Эмулятор оповещений Firebase
Для запуска фоновых событий изменяйте ресурсы бэкэнда с помощью Emulator Suite UI или подключите ваше приложение или тестовый код к эмуляторам, используя SDK для вашей платформы.
Тестовые обработчики для пользовательских событий, генерируемых расширениями.
Для функций, которые вы реализуете для обработки пользовательских событий Firebase Extensions с помощью Cloud Functions v2, эмулятор Cloud Functions работает в паре с эмулятором Eventarc для поддержки триггеров Eventarc .
Для тестирования пользовательских обработчиков событий для расширений, генерирующих события, необходимо установить эмуляторы Cloud Functions и Eventarc.
В среде выполнения Cloud Functions переменная среды EVENTARC_EMULATOR устанавливается в localhost:9299 в текущем процессе, если запущен эмулятор Eventarc. Firebase Admin SDK автоматически подключаются к эмулятору Eventarc при установке переменной среды EVENTARC_EMULATOR . Вы можете изменить порт по умолчанию, как описано в разделе «Настройка Local Emulator Suite .
При правильной настройке переменных среды Firebase Admin SDK автоматически отправляет события в эмулятор Eventarc. В свою очередь, эмулятор Eventarc вызывает эмулятор Cloud Functions для запуска зарегистрированных обработчиков.
Подробную информацию о выполнении обработчиков можно посмотреть в журналах функций в Emulator Suite UI .
Взаимодействие с другими сервисами
В состав пакета эмуляторов входит несколько эмуляторов, позволяющих тестировать взаимодействия между различными продуктами.
Cloud Firestore
Если у вас есть функции, использующие Firebase Admin SDK для записи в Cloud Firestore , эти записи будут отправлены в запущенный эмулятор Cloud Firestore . Если эти записи запускают другие функции, они будут выполняться в эмуляторе Cloud Functions .
Cloud Storage
Если у вас есть функции, использующие Firebase Admin SDK (версия 9.7.0 или выше) для записи в Cloud Storage , эти записи будут отправлены в эмулятор Cloud Storage если он запущен. Если эти записи запускают другие функции, они будут выполняться в эмуляторе Cloud Functions .
Firebase Authentication
Если ваши функции используют Firebase Admin SDK (версия 9.3.0 или выше) для записи данных в Firebase Authentication , эти записи будут отправлены в эмулятор аутентификации, если он запущен. Если эти записи запускают другие функции, они будут выполняться в эмуляторе Cloud Functions .
Хостинг Firebase
Если вы используете Cloud Functions для генерации динамического контента для Firebase Hosting , firebase emulators:start использует ваши локальные HTTP-функции в качестве прокси для хостинга.
Оповещения Firebase
В любом проекте, включающем хотя бы один поддерживаемый триггер оповещений Firebase, пользовательский интерфейс эмулятора содержит вкладку FireAlerts . Для эмуляции триггера оповещений:
- Откройте вкладку FireAlerts . На этой вкладке отображается раскрывающийся список типов оповещений, с которыми связаны триггеры (например, если у вас есть триггер onNewFatalIssuePublished, то отобразится crashlytics.newFatalIssue).
- Выберите тип оповещения. Форма автоматически заполняется значениями по умолчанию, которые можно редактировать. Вы можете редактировать поля события (другая информация из события оповещения может быть получена автоматически, в виде фиктивных значений или сгенерирована случайным образом).
- Выберите «Отправить оповещение» , чтобы отправить синтетическое оповещение в эмулятор функций, при этом ведение журнала будет доступно в разделе «Оповещения» в консоли Firebase (а также в разделе «Журналы»).
Ведение журнала
Эмулятор передает логи из ваших функций в окно терминала, где они выполняются. Он отображает весь вывод из операторов console.log() , console.info() , console.error() и console.warn() внутри ваших функций.
Следующие шаги
Полный пример использования набора инструментов эмулятора Firebase см. в примере быстрого запуска тестирования .