Оболочка Cloud Functions предоставляет интерактивный интерфейс для вызова функций с тестовыми данными. Оболочка поддерживает все типы триггеров.
Настройка учетных данных администратора (необязательно)
Если вы хотите, чтобы ваши функциональные тесты взаимодействовали с API Google или другими API Firebase через Firebase Admin SDK , вам может потребоваться настроить учетные данные администратора.
- Триггеры Cloud Firestore и Realtime Database уже имеют достаточные учетные данные и не требуют дополнительной настройки.
- All other APIs, including Firebase APIs such as Authentication and FCM or Google APIs such as Cloud Translation or Cloud Speech, require the setup steps described in this section. This applies whether you're using the Cloud Functions shell or
firebase emulators:start.
Для настройки учетных данных администратора для эмулируемых функций:
- Откройте панель «Учетные записи служб» в консоли Google Cloud .
- Убедитесь, что выбрана учетная запись службы App Engine по умолчанию , и воспользуйтесь меню параметров справа, чтобы выбрать «Создать ключ» .
- При появлении запроса выберите JSON в качестве типа ключа и нажмите «Создать» .
Настройте учетные данные Google по умолчанию так, чтобы они указывали на загруженный ключ:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase functions:shell
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase functions:shell
After completing these steps, your functions tests can access Firebase and Google APIs using the Admin SDK . For example, when testing an Authentication trigger, the emulated function could call admin.auth().getUserByEmail(email) .
Запускайте функции с помощью оболочки Cloud Functions.
The Cloud Functions shell emulates all types of function triggers with an interactive shell for invoking the functions with test data. Options vary by function type, but the basic usage format is:
myFunctionName(data, options)
The data parameter is required for Realtime Database, Cloud Firestore, and PubSub triggers, and optional for all other function types. Also, the optional options parameter is valid only for Realtime Database and Cloud Firestore functions.
При желании вы можете загрузить тестовые данные из локального файла, сохранив файл в качестве переменной и вызвав функцию, использующую этот файл:
var data = require('./path/to/testData.json');
myFunction(data);
Установите и настройте оболочку Cloud Functions.
To use this feature, firebase-tools must have minimum version 3.11.0, and firebase-functions SDK must have minimum version 0.6.2. To update both, run the following commands in the functions/ directory for your project:
npm install --save firebase-functions@latest
npm install -g firebase-tools
Если вы используете пользовательские переменные конфигурации функций, сначала выполните команду для получения вашей пользовательской конфигурации (выполните её в каталоге functions ) в вашей локальной среде:
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
Наконец, запустите оболочку с помощью следующей команды:
firebase functions:shell
Вызов функций HTTPS
Для вызова функций HTTPS в командной оболочке используется тот же подход, что и с модулем NPM ` request , но замените request на имя функции, которую вы хотите эмулировать. Например:
# invoke
myHttpsFunction()
myHttpsFunction.get()
myHttpsFunction.post()
# invoke at sub-path
myHttpsFunction('/path')
myHttpsFunction.get('/path')
myHttpsFunction.post('/path')
# send POST request with form data
myHttpsFunction.post('/path').form( {foo: 'bar' })
Вызов вызываемых функций HTTPS
При локальном вызове функций, вызываемых по протоколу HTTPS, вам потребуется предоставить соответствующие тестовые данные.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
При желании в качестве второго параметра можно передать Firebase-Instance-ID-token . Это должна быть строка.
# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})
Эмуляция context.auth в настоящее время недоступна.
Вызов функций базы данных реального времени
When running Realtime Database functions locally, you'll need to provide appropriate test data. This generally means providing new test data for onCreate operations, old/removed data for onDelete operations, and both for onUpdate or onWrite functions:
# invoke onCreate function
myDatabaseFunction('new_data')
# invoke onDelete function
myDatabaseFunction('old_data')
# invoke onUpdate or onWrite function
myDatabaseFunction({before: 'old_data', after: 'new_data' })
В дополнение к параметрам before/after , оболочка предоставляет опцию params для имитации подстановочных символов в пути:
# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})
By default, the shell runs Realtime Database functions with admin (service account) privileges. Use the auth option to instead run functions as a particular end user, or as an unauthenticated user:
# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})
Вызов функций Firestore
When running Firestore functions locally, you'll need to provide appropriate test data. This generally means providing new test data for onCreate operations, old/removed data for onDelete operations, and both for onUpdate or onWrite functions. Note that Firestore data has to be key-value pairs; see Supported Data Types .
# invoke onCreate function
myFirestoreFunction({foo: ‘new’})
# invoke onDelete function
myFirestoreFunction({foo: ‘old’})
# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })
В дополнение к полям before/after объекта data , вы можете использовать поля params объекта options для имитации подстановочных символов в имени документа:
# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})
Оболочка всегда запускает функции Firestore с правами администратора, что означает, что она имитирует события создания/обновления/удаления так, как если бы они были выполнены пользователем с правами администратора.
Вызов функций PubSub
Для функций PubSub вставьте содержимое сообщения в экземпляр Buffer и при необходимости добавьте атрибуты данных, как показано ниже:
// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})
Вызов аналитических функций
You can invoke an Analytics function without any data by running myAnalyticsFunction() in the shell. To run the function with test data, it is recommended to define a variable for the specific event data fields that your function needs:
var data = {
eventDim: [{
// populates event.data.params
params: {foo: {stringValue: 'bar'} },
// Also valid:
// {intValue: '10'}, {floatValue: '1.0'}, {doubleValue: '1.0'}
// populates event.data.name
name: 'event_name',
// populates event.data.logTime, specify in microseconds
timestampMicros: Date.now() * 1000,
// populates event.data.previousLogTime, specify in microseconds
previousTimestampMicros: Date.now() * 1000,
// populates event.data.reportingDate, specify in 'YYYYMMDD' format
date: '20170930',
// populates event.data.valueInUSD
valueInUsd: 230
}],
userDim: userDim
};
myAnalyticsFunction(data);
Вызов функций хранения и аутентификации.
Для функций хранения и аутентификации вызовите локальную функцию с тестовыми данными, которые вы хотите увидеть внутри функции. Ваши тестовые данные должны соответствовать соответствующим форматам:
- Для Cloud Storage :
ObjectMetadata - Для Authentication :
UserRecord
Укажите только те поля, от которых зависит ваш код, или не указывайте ни одного, если вам нужно только запустить функцию.