Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

インタラクティブに機能をテストする

Cloud Functions シェルは、テスト データを使用して関数を呼び出すための対話型シェルを提供します。シェルはすべてのトリガー タイプをサポートします。

管理者資格情報の設定 (オプション)

関数テストがFirebase Admin SDKを介して Google API または他の Firebase API とやり取りするようにする場合は、管理者の資格情報の設定が必要になる場合があります。

  • Cloud Firestore と Realtime Database トリガーにはすでに十分な資格情報があり、追加の設定は必要ありませ
  • Authentication や FCM などの Firebase API や、Cloud Translation や Cloud Speech などの Google API など、他のすべての API には、このセクションで説明するセットアップ手順が必要です。これは、Cloud Functions シェルを使用しているか、 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
    

これらの手順を完了すると、関数テストはAdmin SDKを使用して Firebase と Google API にアクセスできるようになります。たとえば、認証トリガーをテストする場合、エミュレートされた関数はadmin.auth().getUserByEmail(email)を呼び出すことができます。

Cloud Functions シェルを使用して関数を提供する

Cloud Functions シェルは、テスト データを使用して関数を呼び出すための対話型シェルを使用して、すべてのタイプの関数トリガーをエミュレートします。オプションは関数の種類によって異なりますが、基本的な使用形式は次のとおりです。

myFunctionName(data, options)

dataパラメータは、Realtime Database、Cloud Firestore、および PubSub トリガーに必須であり、他のすべての関数タイプでは省略可能です。また、オプションoptionsパラメータは、Realtime Database および Cloud Firestore 関数に対してのみ有効です。

必要に応じて、ファイルを変数として保存し、それを使用して関数を呼び出すことで、ローカル ファイルからテスト データを読み込むことができます。

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

Cloud Functions シェルをインストールして構成する

この機能を使用するには、firebase firebase-toolsバージョンが 3.11.0 以上、firebase 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を 2 番目のパラメーターとして渡すことができます。これは文字列でなければなりません。

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

context.authのエミュレーションは現在利用できません。

Realtime Database 関数を呼び出す

Realtime Database 関数をローカルで実行する場合は、適切なテスト データを提供する必要があります。これは一般に、 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}})

デフォルトでは、シェルは管理者 (サービス アカウント) 権限で Realtime Database 機能を実行します。 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’} })

dataオブジェクトのbefore/afterフィールドに加えて、 optionsオブジェクトのparamsフィールドを使用して、ドキュメント名にワイルドカードをモックすることができます。

# 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()を実行すると、データなしで Analytics 関数を呼び出すことができます。テスト データを使用して関数を実行するには、関数に必要な特定のイベント データ フィールドの変数を定義することをお勧めします。

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);

ストレージと認証機能を呼び出す

Storage 関数と Auth 関数の場合は、関数内で表示するテスト データを使用してローカル関数を呼び出します。テスト データは、対応するデータ形式に従う必要があります。

コードが依存するフィールドのみを指定するか、関数を実行するだけの場合は何も指定しません。