В интерфейс командной строки Firebase входит эмулятор Cloud Functions, который может имитировать следующие типы функций:
- Функции HTTPS
- Вызываемые функции
- Функции очереди задач
- Фоновые функции, активируемые из Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, поддерживаемых оповещений Firebase и Cloud Pub/Sub.
Функции можно запускать локально, чтобы протестировать их перед развертыванием в рабочей среде.
Как установить интерфейс командной строки Firebase
Чтобы использовать эмулятор Cloud Functions, сначала установите интерфейс командной строки Firebase:
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, в том числе Firebase API, таких как 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
После этого тесты функций смогут получать доступ к Firebase и API 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"
После запуска эмулятор передает журналы из функций в окно терминала, в котором он работает. Он показывает все выходные данные из операторов console.log(), console.info(), console.error() и console.warn() внутри ваших функций.
Обратите внимание, что по умолчанию эмулятор имитирует развертывание функций в определенном регионе (us-central1), который может не совпадать с регионом по умолчанию для фактического развертывания. Подробнее о местоположении Cloud Functions…
Как настроить приложение для работы с эмуляторами
Чтобы настроить взаимодействие приложения с эмуляторами, может потребоваться дополнительная конфигурация.
Как инструментировать приложение для вызываемых функций
Если в прототипе и тестовых действиях используются вызываемые функции серверной части, настройте взаимодействие с эмулятором 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);
Swift
Functions.functions().useEmulator(withHost: "localhost", port: 5001)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance; // Connects to the Functions Emulator running on port 5001 functions.UseFunctionsEmulator("http://127.0.0.1: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 версии 2, эмулятор 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 Hosting
Если вы используете Cloud Functions для создания динамического контента для Firebase Hosting, firebase emulators:startиспользует ваши локальные функции HTTP в качестве прокси-серверов для хостинга.
Оповещения Firebase
В любом проекте, в котором есть хотя бы один поддерживаемый триггер оповещения Firebase, в интерфейсе эмулятора есть вкладка FireAlerts. Чтобы эмулировать триггер оповещения:
- Откройте вкладку FireAlerts. На этой вкладке есть раскрывающийся список с типами оповещений, для которых настроены триггеры (например, если у вас есть триггер onNewFatalIssuePublished, то в списке будет crashlytics.newFatalIssue).
- Выберите тип оповещения. В форме автоматически заполняются значения по умолчанию, которые можно изменить. Вы можете изменить поля события (другая информация из события оповещения либо выводится на основе имеющихся данных, либо является фиктивной, либо генерируется случайным образом).
- Нажмите Отправить оповещение, чтобы отправить синтетическое оповещение в эмулятор функций. Журналы будут доступны в разделе Оповещения консоли Firebase (а также в журналах).
Дальнейшие действия
Полный пример использования Emulator Suite можно найти в образце для быстрого начала работы с тестированием.