rules-unit-testing パッケージ

関数

関数 説明
assertFails(pr) 「permission denied」で拒否される Promise をアサートします。error.特定のリクエストをセキュリティ ルールで拒否するようにアサートする場合に便利です。以下の例をご覧ください。この関数は、Database、Firestore、Storage JS SDK の権限拒否エラーを認識します。
assertSucceeds(pr) 「permission denied」で拒否される Promise をアサートします。エラー。これは渡された Promise をそのまま返す NoOps 関数ですが、テストコードで文書化の目的で使用すると、特定のリクエストが成功することを強調できます(ルールで許可されている場合など)。
InitializeTestEnvironment(config) ルールの単体テスト用の環境を初期化します。テストをセットアップするには、最初にこの関数を呼び出します。エミュレータが実行されている必要があります。ホストとポートが指定されていない場合は、環境変数を介して、または Firebase Emulator ハブを介して、これらのエミュレータの検出を試みます。テストに使用するエミュレータのセキュリティ ルールを指定することを強くおすすめします。下記の最小限の例をご覧ください。
withFunctionTriggersDisabled(fn) Cloud Functions のバックグラウンド トリガーを無効にして設定関数を実行します。これを使用すると、ローカルでエミュレートされた Cloud Functions の関数をトリガーせずに、Realtime Database または Cloud Firestore エミュレータにデータをインポートできます。この方法は、Firebase CLI バージョン 8.13.0 以降でのみ機能します。このオーバーロードは、エミュレータ ハブの host:port が環境変数 FIREBASE_EMULATOR_HUB で指定された場合にのみ機能します。
withFunctionTriggersDisabled(hub, fn) バックグラウンド Cloud Functions トリガーを無効にして設定関数を実行します。これを使用すると、ローカルでエミュレートされた Cloud Functions の関数をトリガーせずに、Realtime Database または Cloud Firestore のエミュレータにデータをインポートできます。この方法は、Firebase CLI バージョン 8.13.0 以降でのみ機能します。エミュレータ ハブが動作している必要があります。このオーバーロードで指定されるホストとポートは、

インターフェース

インターフェース 説明
HostAndPort エミュレータのホスト名とポート番号を含むオブジェクト。
RulesTestContext クライアントを表すテスト コンテキスト。ルールの単体テスト用のエミュレータへのアクセスに使用できます。
RulesTestEnvironment ルールの単体テスト環境の制御に使用されるオブジェクト。さまざまな認証状況の RulesTestContext の作成に使用できます。
TestEnvironmentConfig エミュレータを含む単体テスト環境の構成。

型エイリアス

型エイリアス 説明
EmulatorConfig 特定のエミュレータの構成。
TokenOptions デベロッパーが指定したカスタム クレームや、Firebase Auth トークン ペイロードのオプションのオーバーライドなど、テストに使用する疑似ユーザー トークンのオプションが増えました。

assertFails()

「permission denied」で拒否される Promise をアサートします。エラーが発生します。

セキュリティ ルールによって特定のリクエストが拒否されるようアサートする場合に便利です。以下の例をご覧ください。この関数は、Database、Firestore、Storage JS SDK の権限拒否エラーを認識します。

署名:

export declare function assertFails(pr: Promise<any>): Promise<any>;

パラメータ

パラメータ 説明
pr <任意> を約束する アサートされるという Promise があります。

戻り値:

<任意> を約束する

pr が「permission denied」により拒否された場合に実行される Promise。pr が他のエラーで拒否されたか、解決された場合、返された Promise が拒否されます。

const unauthed = testEnv.unauthenticatedContext();
await assertFails(getDoc(unauthed.firestore(), '/private/doc'), { ... });

assertSucceeds()

成功を約束する。

これは、渡された Promise をそのまま返す NoOps 関数ですが、テストコードで文書化の目的で、特定のリクエストが成功することを強調するために使用できます(ルールによる許可など)。

署名:

export declare function assertSucceeds<T>(pr: Promise<T>): Promise<T>;

パラメータ

パラメータ 説明
pr Promise<T>

戻り値:

Promise<T>

const alice = testEnv.authenticatedContext('alice');
await assertSucceeds(getDoc(alice.firestore(), '/doc/readable/by/alice'), { ... });

InitializeTestEnvironment()

ルールの単体テスト用の環境を初期化します。テストのセットアップでは、最初にこの関数を呼び出します。

エミュレータを実行する必要があります。ホストとポートが指定されていない場合は、環境変数を介して、または Firebase Emulator ハブを介して、これらのエミュレータの検出を試みます。テストに使用するエミュレータのセキュリティ ルールを指定することを強くおすすめします。下記の最小限の例をご覧ください。

署名:

export declare function initializeTestEnvironment(config: TestEnvironmentConfig): Promise<RulesTestEnvironment>;

パラメータ

パラメータ 説明
config TestEnvironmentConfig エミュレータの構成もサポートしています。ほとんどのフィールドは、検出できる場合は省略可能です。

戻り値:

Promise <RulesTestEnvironment>

テストの準備ができた環境で解決されるか、エラー時に拒否される Promise。

const testEnv = await initializeTestEnvironment({
  firestore: {
    rules: fs.readFileSync("/path/to/firestore.rules", "utf8"), // Load rules from file
    // host and port can be omitted if they can be discovered from the hub.
  },
  // ...
});

withFunctionTriggersDisabled()

Cloud Functions のバックグラウンド トリガーを無効にして設定関数を実行します。これを使用すると、ローカルでエミュレートされた Cloud Functions をトリガーせずに、Realtime Database または Cloud Firestore エミュレータにデータをインポートできます。

この方法は、Firebase CLI バージョン 8.13.0 以降でのみ機能します。このオーバーロードは、エミュレータ ハブの host:port が環境変数 FIREBASE_EMULATOR_HUB で指定された場合にのみ機能します。

署名:

export declare function withFunctionTriggersDisabled<TResult>(fn: () => TResult | Promise<TResult>): Promise<TResult>;

パラメータ

パラメータ 説明
関数 () =>TResult |Promise<TResult> 同期または非同期の関数(Promise を返す)

戻り値:

Promise<TResult>

withFunctionTriggersDisabled()

Cloud Functions のバックグラウンド トリガーを無効にして設定関数を実行します。これを使用すると、ローカルでエミュレートされた Cloud Functions をトリガーせずに、Realtime Database または Cloud Firestore エミュレータにデータをインポートできます。

この方法は、Firebase CLI バージョン 8.13.0 以降でのみ機能します。エミュレータ ハブが動作している必要があります。このオーバーロードで指定されるホストとポートは、

署名:

export declare function withFunctionTriggersDisabled<TResult>(hub: {
    host: string;
    port: number;
}, fn: () => TResult | Promise<TResult>): Promise<TResult>;

パラメータ

パラメータ 説明
ハブ { ホスト: string;port: number;} Emulator Hub のホストとポート(例: {host: 'localhost', port: 4400}
関数 () =>TResult |Promise<TResult> 同期または非同期の関数(Promise を返す)

戻り値:

Promise<TResult>

EmulatorConfig

特定のエミュレータの構成。

署名:

export declare type EmulatorConfig = {
    rules?: string;
} & (HostAndPort | {});

TokenOptions

デベロッパーが指定したカスタム クレームや、Firebase Auth トークン ペイロードのオプションのオーバーライドなど、テストに使用する疑似ユーザー トークンのオプションが増えました。

署名:

export declare type TokenOptions = {
    iat?: number;
    exp?: number;
    auth_time?: number;
    provider_id?: 'anonymous';
    email?: string;
    email_verified?: boolean;
    phone_number?: string;
    name?: string;
    picture?: string;
    firebase?: {
        sign_in_provider: FirebaseSignInProvider;
        identities?: {
            [provider in FirebaseSignInProvider]?: string[];
        };
    };
    aud?: string;
    iss?: string;
    [claim: string]: unknown;
    uid?: never;
    sub?: never;
    user_id?: never;
};