规则单元测试包

功能

功能描述
断言失败(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;
};