قوانین-واحد-بسته تست

کارکرد

تابع شرح
assertFails (pr) قول رد شدن را با خطای «مجوز رد شد» اعلام کنید. برای ارائه درخواست خاصی که توسط قوانین امنیتی رد شود مفید است. مثال زیر را ببینید. این تابع خطاهای مجوز رد شده را از پایگاه داده، Firestore و Storage JS SDK شناسایی می کند.
ادعا موفق می شود (PR) قول رد شدن را با خطای «مجوز رد شد» اعلام کنید. این یک تابع بدون عملیات است که وعده داده شده را همانطور که هست برمی گرداند، اما می تواند برای اهداف مستندسازی در کد آزمایشی استفاده شود تا تاکید کند که یک درخواست خاص باید موفق شود (مثلاً توسط قوانین مجاز است).
InitializeTestEnvironment(config) یک محیط آزمایشی را برای آزمایش واحد قوانین راه اندازی می کند. برای تنظیم تست ابتدا این تابع را فراخوانی کنید. نیاز به شبیه ساز برای اجرا دارد. این تابع سعی می کند آن شبیه سازها را از طریق متغیرهای محیطی یا از طریق Hub شبیه ساز Firebase در صورتی که میزبان ها و پورت ها مشخص نشده باشند، کشف کند. اکیداً توصیه می شود که قوانین امنیتی را برای شبیه سازهای مورد استفاده برای آزمایش مشخص کنید. نمونه حداقلی را در زیر ببینید.
withFunctionTriggersDisabled(fn) یک تابع راه‌اندازی را با غیرفعال کردن فعال‌های پس‌زمینه Cloud Functions اجرا کنید. این می تواند برای وارد کردن داده ها به پایگاه داده بیدرنگ یا شبیه ساز Cloud Firestore بدون راه اندازی توابع Cloud شبیه سازی شده محلی استفاده شود. این روش فقط با Firebase CLI نسخه 8.13.0 یا بالاتر کار می کند. این اضافه بار فقط در صورتی کار می کند که میزبان هاب: پورت Emulator توسط متغیر محیطی FIREBASE_EMULATOR_HUB مشخص شده باشد.
withFunctionTriggersDisabled (هاب، fn) یک تابع راه‌اندازی را با غیرفعال کردن فعال‌های پس‌زمینه Cloud Functions اجرا کنید. این می تواند برای وارد کردن داده ها به پایگاه داده بیدرنگ یا شبیه ساز Cloud Firestore بدون راه اندازی توابع Cloud شبیه سازی شده محلی استفاده شود. این روش فقط با Firebase CLI نسخه 8.13.0 یا بالاتر کار می کند. هاب Emulator باید در حال اجرا باشد که میزبان و پورت در این اضافه بار مشخص شده است.

رابط ها

رابط شرح
HostAndPort یک شی حاوی نام میزبان و شماره پورت یک شبیه ساز.
RulesTestContext یک زمینه آزمایشی که یک مشتری را نشان می دهد. می توان برای دسترسی به شبیه سازها برای تست واحد قوانین استفاده کرد.
RulesTestEnvironment یک شی مورد استفاده برای کنترل محیط تست واحد قوانین. می تواند برای ایجاد RulesTestContext برای موقعیت های مختلف احراز هویت استفاده شود.
TestEnvironmentConfig پیکربندی محیط تست واحد، از جمله شبیه سازها.

نام مستعار را تایپ کنید

نام مستعار را تایپ کنید شرح
EmulatorConfig پیکربندی برای یک شبیه ساز معین
TokenOptions گزینه های بیشتری برای توکن کاربر ساختگی که برای آزمایش استفاده می شود، از جمله ادعاهای سفارشی تعیین شده توسط توسعه دهنده یا لغو اختیاری برای بارهای توکن Firebase Auth.

assertFails()

قول رد شدن را با خطای «مجوز رد شد» اعلام کنید.

برای ارائه درخواست خاصی که توسط قوانین امنیتی رد شود مفید است. مثال زیر را ببینید. این تابع خطاهای مجوز رد شده را از پایگاه داده، Firestore و Storage JS SDK شناسایی می کند.

امضا:

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

مولفه های

پارامتر تایپ کنید شرح
pr قول <هر> قولی که باید ادعا شود

برمی‌گرداند:

قول <هر>

قولی که اگر pr با «مجوز رد شده» رد شود محقق می شود. اگر pr با هر خطای دیگری رد شود یا حل شود، قول برگشتی رد می شود.

مثال

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

assertSucceeds()

قول موفقیت را ثابت کنید.

این یک تابع بدون عملیات است که وعده داده شده را همانطور که هست برمی گرداند، اما می تواند برای اهداف مستندسازی در کد آزمایشی استفاده شود تا تاکید کند که یک درخواست خاص باید موفق شود (مثلاً توسط قوانین مجاز است).

امضا:

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

مولفه های

پارامتر تایپ کنید شرح
pr قول<T>

برمی‌گرداند:

قول<T>

مثال

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

InitializeTestEnvironment()

یک محیط آزمایشی را برای آزمایش واحد قوانین راه اندازی می کند. برای تنظیم تست ابتدا این تابع را فراخوانی کنید.

نیاز به شبیه ساز برای اجرا دارد. این تابع سعی می کند آن شبیه سازها را از طریق متغیرهای محیطی یا از طریق Hub شبیه ساز Firebase در صورتی که میزبان ها و پورت ها مشخص نشده باشند، کشف کند. اکیداً توصیه می شود که قوانین امنیتی را برای شبیه سازهای مورد استفاده برای آزمایش مشخص کنید. نمونه حداقلی را در زیر ببینید.

امضا:

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

مولفه های

پارامتر تایپ کنید شرح
پیکربندی TestEnvironmentConfig پیکربندی برای شبیه سازها اگر بتوان آنها را کشف کرد، اکثر فیلدها اختیاری هستند

برمی‌گرداند:

Promise< RulesTestEnvironment >

قولی که با محیطی آماده برای آزمایش حل می شود یا در صورت خطا رد می شود.

مثال

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 شبیه سازی شده محلی استفاده شود.

این روش فقط با Firebase CLI نسخه 8.13.0 یا بالاتر کار می کند. این اضافه بار فقط در صورتی کار می کند که میزبان هاب: پورت Emulator توسط متغیر محیطی FIREBASE_EMULATOR_HUB مشخص شده باشد.

امضا:

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

مولفه های

پارامتر تایپ کنید شرح
fn () => TRنتیجه | Promise<TResult> تابعی که ممکن است همگام یا ناهمگام باشد (یک وعده را برمی گرداند)

برمی‌گرداند:

Promise<TResult>

withFunctionTriggersDisabled()

یک تابع راه‌اندازی را با غیرفعال کردن فعال‌های پس‌زمینه Cloud Functions اجرا کنید. این می تواند برای وارد کردن داده ها به پایگاه داده بیدرنگ یا شبیه ساز Cloud Firestore بدون راه اندازی توابع Cloud شبیه سازی شده محلی استفاده شود.

این روش فقط با Firebase CLI نسخه 8.13.0 یا بالاتر کار می کند. هاب Emulator باید در حال اجرا باشد که میزبان و پورت در این اضافه بار مشخص شده است.

امضا:

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

مولفه های

پارامتر تایپ کنید شرح
هاب { میزبان: رشته; پورت: شماره; } میزبان و پورت Emulator Hub (مثلاً: {host: 'localhost', port: 4400} )
fn () => TRنتیجه | Promise<TResult> تابعی که ممکن است همگام یا ناهمگام باشد (یک وعده را برمی گرداند)

برمی‌گرداند:

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