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
Окна
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 , эти записи будут отправлены в эмулятор Auth, если он запущен. Если эти записи запускают дополнительные функции, они будут запущены в эмуляторе 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 см. в примере быстрого запуска тестирования .