規則單元測試包

功能

功能描述
斷言失敗(pr)斷言承諾會因「權限被拒絕」錯誤而被拒絕。對於斷言安全規則拒絕的特定請求很有用。請參閱下面的範例。此函數可識別來自資料庫、Firestore 和儲存 JS SDK 的權限拒絕錯誤。
斷言成功(pr)斷言承諾會因「權限被拒絕」錯誤而被拒絕。這是一個無操作函數,按原樣返回傳遞的 Promise,但可用於測試程式碼中的文件目的,以強調某個請求應該成功(例如,規則允許)。
初始化測試環境(配置)初始化規則單元測試的測試環境。首先呼叫此函數進行測試設定。需要模擬器正在運作。如果未指定主機和端口,此函數會嘗試透過環境變數或透過 Firebase 模擬器中心發現這些模擬器。強烈建議為用於測試的模擬器指定安全規則。請參閱下面的最小範例。
withFunctionTriggersDisabled(fn)在停用後台 Cloud Functions 觸發器的情況下執行設定函數。這可用於將資料匯入即時資料庫或 Cloud Firestore 模擬器,而無需觸發本地模擬的 Cloud Functions。此方法僅適用於 Firebase CLI 版本 8.13.0 或更高版本。只有當模擬器集線器主機:連接埠由環境變數 FIREBASE_EMULATOR_HUB 指定時,此重載才有效。
withFunctionTriggersDisabled(集線器,fn)在停用後台 Cloud Functions 觸發器的情況下執行設定函數。這可用於將資料匯入即時資料庫或 Cloud Firestore 模擬器,而無需觸發本地模擬的 Cloud Functions。此方法僅適用於 Firebase CLI 版本 8.13.0 或更高版本。模擬器集線器必須正在運行,在此重載中指定了主機和連接埠。

介面

介面描述
主機和連接埠包含模擬器的主機名稱和連接埠號碼的物件。
規則測試上下文代表客戶端的測試上下文。可用於存取模擬器以進行規則單元測試。
規則測試環境用於控制單元測試環境的規則的物件。可用於為不同的身份驗證情況建立 RulesTestContext。
測試環境配置配置單元測試環境,包括模擬器。

類型別名

類型別名描述
模擬器配置給定模擬器的配置。
代幣期權用於測試的模擬使用者令牌的更多選項,包括開發人員指定的自訂聲明或 Firebase 身份驗證令牌有效負載的可選覆蓋。

斷言失敗()

斷言承諾會因「權限被拒絕」錯誤而被拒絕。

對於斷言安全規則拒絕的特定請求很有用。請參閱下面的範例。此函數可識別來自資料庫、Firestore 和儲存 JS SDK 的權限拒絕錯誤。

簽名:

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

參數

範圍類型描述
公關承諾<任何>所要兌現的承諾

返回:

承諾<任何>

如果 pr 因「權限被拒絕」而被拒絕,則履行 Promise。如果 pr 因任何其他錯誤而被拒絕或已解決,則傳回的 Promise 將被拒絕。

例子

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

斷言成功()

兌現承諾才能成功。

這是一個無操作函數,按原樣返回傳遞的 Promise,但可用於測試程式碼中的文件目的,以強調某個請求應該成功(例如,規則允許)。

簽名:

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

參數

範圍類型描述
公關承諾<T>

返回:

承諾<T>

例子

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

初始化測試環境()

初始化規則單元測試的測試環境。首先呼叫此函數進行測試設定。

需要模擬器正在運作。如果未指定主機和端口,此函數會嘗試透過環境變數或透過 Firebase 模擬器中心發現這些模擬器。強烈建議為用於測試的模擬器指定安全規則。請參閱下面的最小範例。

簽名:

export declare function initializeTestEnvironment(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 Firestore 模擬器,而無需觸發本地模擬的 Cloud Functions。

此方法僅適用於 Firebase CLI 版本 8.13.0 或更高版本。只有當模擬器集線器主機:連接埠由環境變數 FIREBASE_EMULATOR_HUB 指定時,此重載才有效。

簽名:

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

參數

範圍類型描述
() => TResult |承諾<TResult>一個可以是同步或非同步的函數(傳回一個承諾)

返回:

承諾<TResult>

withFunctionTriggersDisabled()

在停用後台 Cloud Functions 觸發器的情況下執行設定函數。這可用於將資料匯入即時資料庫或 Cloud Firestore 模擬器,而無需觸發本地模擬的 Cloud Functions。

此方法僅適用於 Firebase CLI 版本 8.13.0 或更高版本。模擬器集線器必須正在運行,在此重載中指定了主機和連接埠。

簽名:

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

參數

範圍類型描述
中心{ 主機:字串;埠:號碼; }模擬器集線器的主機和連接埠(例如: {host: 'localhost', port: 4400}
() => TResult |承諾<TResult>一個可以是同步或非同步的函數(傳回一個承諾)

返回:

承諾<TResult>

模擬器配置

給定模擬器的配置。

簽名:

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

代幣期權

用於測試的模擬使用者令牌的更多選項,包括開發人員指定的自訂聲明或 Firebase 身份驗證令牌有效負載的可選覆蓋。

簽名:

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