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