Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Интерактивное тестирование функций

Оболочка Cloud Functions предоставляет интерактивную оболочку для вызова функций с тестовыми данными. Оболочка поддерживает все типы триггеров.

Настройте учетные данные администратора (необязательно)

Если вы хотите , чтобы ваши функции тестов , чтобы взаимодействовать с Google API , или другими Firebase API , с помощью Firebase Admin SDK , возможно , потребуется настроить учетные данные администратора.

  • Облако Firestore и в режиме реального времени базы данных триггеры уже имеют достаточные полномочия, и не требуют дополнительной настройки.
  • Все остальные API, включая API Firebase, такие как Authentication и FCM, или API Google, такие как Cloud Translation или Cloud Speech, требуют действий по настройке, описанных в этом разделе. Это относится ли вы используете функции оболочку или firebase emulators:start .

Чтобы настроить учетные данные администратора для эмулируемых функций:

  1. Откройте панель служебных учетных записей в Google Cloud Console.
  2. Убедитесь , что учетная запись службы по умолчанию App Engine выбрана, и используйте меню опций справа выберите Создать ключ.
  3. При появлении запроса выберите JSON для типа ключа, и нажмите кнопку Создать.
  4. Установите учетные данные Google по умолчанию, чтобы они указывали на загруженный ключ:

    Unix

    $ export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    
    $ firebase functions:shell
    

    Окна

    $ set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    
    $ firebase functions:shell
    

После выполнения этих шагов, ваши функции тесты могут получить доступ к Firebase и Google API , с помощью администратора SDK . Например, при тестировании триггера аутентификации, эмулируемая функции можно назвать admin.auth().getUserByEmail(email) .

Обслуживание функций с помощью оболочки Cloud Functions

Оболочка Cloud Functions эмулирует все типы триггеров функций с помощью интерактивной оболочки для вызова функций с тестовыми данными. Параметры различаются в зависимости от типа функции, но основной формат использования:

myFunctionName(data, options)

data параметр необходим для реального времени базы данных, Cloud Firestore и PubSub триггеров, и дополнительно для всех других типов функций. Кроме того , по желанию options параметр действителен только для реального времени базы данных и функции Cloud Firestore.

При желании вы можете загрузить тестовые данные из локального файла, сохранив файл как переменную и вызвав с ней функцию:

var data = require('./path/to/testData.json');
myFunction(data);

Установите и настройте оболочку Cloud Functions.

Для того, чтобы использовать эту функцию, firebase-tools должны иметь минимальную версию 3.11.0, и firebase-functions SDK должна иметь минимальную версию 0.6.2. Для обновления и выполните следующие команды в functions/ директории вашего проекта:

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 функций в оболочке, использование такого же , как request модуль NPM, но заменить 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 Callable вам необходимо предоставить соответствующие тестовые данные.

# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})

При желании, можно передать в Firebase-Instance-ID-token в качестве второго параметра. Это должна быть строка.

# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})

Эмуляция context.auth в данный момент недоступна.

Вызов функций базы данных в реальном времени

При локальном запуске функций базы данных реального времени вам необходимо предоставить соответствующие тестовые данные. Как правило , это означает предоставление новых тестовых данных для onCreate операций, старые / удалённые данные для onDelete операций, а также как для onUpdate или onWrite функций:

# 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}})

По умолчанию оболочка запускает функции базы данных в реальном времени с правами администратора (служебной учетной записи). Используйте auth опцию вместо запускать функции в качестве конкретного конечного пользователя, или как неаутентифицированному пользователя:

# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})

Вызов функций Firestore

При локальном запуске функций Firestore вам необходимо предоставить соответствующие тестовые данные. Как правило , это означает предоставление новых тестовые данных для onCreate операций, старые / удалённых данных для onDelete операций, а также как для onUpdate или onWrite функций. Обратите внимание, что данные Firestore должны быть парами ключ-значение; см Поддерживаемые типы данных .

# 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'}})

Вызов функций аналитики

Вы можете вызвать функцию Analytics без каких - либо данных, запустив myAnalyticsFunction() в оболочке. Чтобы запустить функцию с тестовыми данными, рекомендуется определить переменную для конкретных полей данных события, которые необходимы вашей функции:

var data = {
  eventDim: [{
    // populates event.data.params
    params:{foo:'bar'},
    // 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);

Вызов функций хранилища, аутентификации и Crashlytics

Для функций Storage, Auth и Crashlytics вызовите локальную функцию с тестовыми данными, которые вы хотите видеть внутри функции. Ваши тестовые данные должны соответствовать соответствующим форматам данных:

Укажите только поля, от которых зависит ваш код, или не укажите вообще, если вы хотите только запустить функцию.