Firebase関数ユニットテスト
サーバー運営をfirebaseとして行い、firebase公式ドキュメントを整理したいです.
このページでは、 firebase-機能に必要な SDKは
関数フォルダで、次のコマンドを実行して
最後はfunctions/pacakageです.jsonを変更して、次の内容を追加します.
オンラインモード(推奨):テスト専用のFirebaseプロジェクトと対話して、実際にデータベースの書き込み、ユーザーの作成などの操作を行い、テストコードを使用して結果を確認するテストを作成します.つまり、関数で使用される他のGoogle SDKも正常に動作します.
オフラインモード:副作用なしで独立したオフライン単位テストを作成します.これは、データベースの書き込みやユーザーの作成など、Firebase製品と対話するすべてのメソッド呼び出しがルート処理される必要があることを意味します.クラウドリカバリまたはリアルタイムデータベース関数があると、テストコードの複雑さが大幅に増加するため、オフラインモードは一般的に推奨されません.
テストプロジェクトとインタラクティブなテストを作成するには、firebase-adminでアプリケーションを初期化するために必要なプロジェクト構成値とサービスアカウントキーファイルのパスを指定する必要があります.
Firebaseプロジェクトの構成値を取得するには、次の手順に従います. Firebaseコンソールでプロジェクト設定を開きます. 私のアプリケーションから目的のアプリケーションを選択します. の右側のペインで、AppleとAndroidアプリケーションのプロファイルをダウンロードするオプションを選択します. 鍵ファイルを作成する方法は次のとおりです. Google Cloudコンソールのサービスアカウントウィンドウを開きます. アプリケーション・エンジンのデフォルト・サービス・アカウントを選択し、右側のオプション・メニューを使用してキーを作成します. メッセージが表示された場合は、鍵タイプとしてJSONを選択し、「作成」をクリックします. 鍵ファイルを保存した後、SDKを以下のように初期化します.
完全オフラインテストを作成するには、パラメータなしでSDKを初期化します.
関数コードで
関数をインポートするには、requireを使用してデフォルトの関数ファイルをモジュールにインポートします.インポートできるのはfirebase-functions-testを初期化し、処理構成値をシミュレートした後のみです.
HTTP以外の関数をテストするには、次の手順に従います. test.wrapメソッドでテストする関数をパッケージします. テストデータを構成します. 作成された関数を呼び出します.で構成されたテストデータと、指定するイベントコンテキストフィールドが含まれます. アクションのプレゼンテーションを作成します. まず、テストする関数をカプセル化します.functions/index.jsにmakeUppercaseというテスト関数があるとします.functions/test/index.test.jsでは、次のコードを記述します.データ(必須):makeUppercaseに送信するデータ.作成した関数ハンドラは、渡された最初のパラメータに直接対応します.Firebase-functions-testは、基準データまたはサンプルデータを構成する方法を提供します. EventContextOptions(オプション):指定するイベントコンテキストのフィールド.イベントコンテキストは、作成した関数ハンドラに送信される2番目のパラメータです.wrappedを呼び出すと、イベントコンテキストはeventContextOptionsパラメータを含まない適切なフィールドとして作成されます.この指定後、生成されたフィールドの一部を再定義できます.再定義するフィールドのみを含める必要があります.再定義されていないすべてのフィールドが作成されます.
クラウド機能ユニットテスト
このページでは、
지속적 통합(CI)시스템에 포함될 테스트
に関する推奨事項とツール、例えば함수용 단위 테스트 작성
について説明します.Firebaseはクラウド機能にFirebase Test SDK
を提供し、テストしやすい.firebase-functions-testとしてnpmに配備され、firebase-functionsの同期テストSDKです.クラウド機能のFirebase Test SDKを使用すると、次のことができます.환경 변수를 설정 및 설정 해제
のように、適切なテスト設定と無効化を処理します.샘플 데이터
と이벤트 컨텍스트를 생성
なので、テストに関するフィールドを指定するだけです.テスト設定
関数フォルダで、次のコマンドを実行して
firebase-functions-test
とテストフレームMocha
をインストールします.npm install --save-dev firebase-functions-test
npm install --save-dev mocha
次に、関数フォルダにtestフォルダを作成し、テストコードの新しいファイルを作成し、index.test.js
と同じ名前を指定します.最後はfunctions/pacakageです.jsonを変更して、次の内容を追加します.
"scripts": {
"test": "mocha --reporter spec"
}
テストを作成すると、npm test
を関数ディレクトリで実行してテストを実行できます.初期化クラウド機能のFirebase Test SDK
firebase-functions-test
を使用するには、次の2つの方法があります.オンラインモード(推奨):テスト専用のFirebaseプロジェクトと対話して、実際にデータベースの書き込み、ユーザーの作成などの操作を行い、テストコードを使用して結果を確認するテストを作成します.つまり、関数で使用される他のGoogle SDKも正常に動作します.
オフラインモード:副作用なしで独立したオフライン単位テストを作成します.これは、データベースの書き込みやユーザーの作成など、Firebase製品と対話するすべてのメソッド呼び出しがルート処理される必要があることを意味します.クラウドリカバリまたはリアルタイムデータベース関数があると、テストコードの複雑さが大幅に増加するため、オフラインモードは一般的に推奨されません.
オンラインモードでのSDKの初期化(推奨)
テストプロジェクトとインタラクティブなテストを作成するには、firebase-adminでアプリケーションを初期化するために必要なプロジェクト構成値とサービスアカウントキーファイルのパスを指定する必要があります.
Firebaseプロジェクトの構成値を取得するには、次の手順に従います.
const test = require('firebase-functions-test')({
databaseURL: 'https://my-project.firebaseio.com',
storageBucket: 'my-project.appspot.com',
projectId: 'my-project',
}, 'path/to/serviceAccountKey.json');
オフラインモードでのSDKの初期化
完全オフラインテストを作成するには、パラメータなしでSDKを初期化します.
// At the top of test/index.test.js
const test = require('firebase-functions-test')();
シミュレーション構成値
関数コードで
functions.config()
を使用すると、構成値をシミュレートできます.たとえば、functions/index.js
に次のコードが含まれている場合.const functions = require('firebase-functions');
const key = functions.config().stripe.key;
次に、テストファイルの値を次のようにシミュレートできます.// Mock functions config values
test.mockConfig({ stripe: { key: '23wr42ewr34' }});
関数のインポート
関数をインポートするには、requireを使用してデフォルトの関数ファイルをモジュールにインポートします.インポートできるのはfirebase-functions-testを初期化し、処理構成値をシミュレートした後のみです.
// after firebase-functions-test has been initialized.
const myFunctions = require('../index.js'); // relative path to functions code
オフラインモードでfirebase-functions-testを初期化し、関数コードにadminを追加します.InitializeApp()がある場合は、関数をインポートする前にスタブを処理する必要があります.// If index.js calls admin.initializeApp at the top of the file.
// we need to stub it out before requiring index.js. This is because the
// functions will be executed as a part of the require process.
// Here we stub admin.initializeApp to be a dummy function that doesn't do anything
adminInitStub = sinon.stub(admin, 'initializeApp');
// Now we can require index.js and save the exports inside a namespace called myFunctions.
myFunctions = require('../index.js');
HTTPではなくバックグラウンド関数のテスト
HTTP以外の関数をテストするには、次の手順に従います.
const myFunctions = require('../index.js');
const wrpped = test.wrap(myFunctions.makeUppercase);
wrappedは呼び出し時にmakeUppercaseを呼び出す関数です.wrappedは2つのパラメータを使用します.Reference
この問題について(Firebase関数ユニットテスト), 我々は、より多くの情報をここで見つけました https://velog.io/@ragnarok_code/Firebase-공식문서-정리-함수-단위-테스트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol