แพ็คเกจการทดสอบกฎ-หน่วย

ฟังก์ชั่น

การทำงาน คำอธิบาย
assertFails (PR) ยืนยันคำมั่นสัญญาที่จะถูกปฏิเสธโดยมีข้อผิดพลาด "สิทธิ์ถูกปฏิเสธ" มีประโยชน์ในการยืนยันคำขอบางอย่างที่ถูกปฏิเสธตามกฎความปลอดภัย ดูตัวอย่างด้านล่าง ฟังก์ชันนี้รับรู้ข้อผิดพลาดที่ถูกปฏิเสธสิทธิ์จาก Database, Firestore และ Storage JS SDK
ยืนยันความสำเร็จ(pr) ยืนยันคำมั่นสัญญาที่จะถูกปฏิเสธโดยมีข้อผิดพลาด "สิทธิ์ถูกปฏิเสธ" นี่เป็นฟังก์ชัน no-op ที่ส่งคืนสัญญาที่ส่งผ่านตามที่เป็นอยู่ แต่สามารถใช้เพื่อวัตถุประสงค์ด้านเอกสารในโค้ดทดสอบเพื่อเน้นว่าคำขอบางอย่างควรประสบความสำเร็จ (เช่น ได้รับอนุญาตตามกฎ)
เริ่มต้น TestEnvironment (config) เริ่มต้นสภาพแวดล้อมการทดสอบสำหรับการทดสอบหน่วยกฎ เรียกใช้ฟังก์ชันนี้ก่อนเพื่อทดสอบการตั้งค่า ต้องใช้โปรแกรมจำลองในการทำงาน ฟังก์ชันนี้จะพยายามค้นหาโปรแกรมจำลองเหล่านั้นผ่านตัวแปรสภาพแวดล้อมหรือผ่านฮับ Firebase Emulator หากไม่ได้ระบุโฮสต์และพอร์ต ขอแนะนำอย่างยิ่งให้ระบุกฎความปลอดภัยสำหรับโปรแกรมจำลองที่ใช้สำหรับการทดสอบ ดูตัวอย่างขั้นต่ำด้านล่าง
withFunctionTriggersDisabled (fn) เรียกใช้ฟังก์ชันการตั้งค่าโดยปิดใช้ทริกเกอร์ Cloud Functions ในเบื้องหลัง ซึ่งสามารถใช้เพื่อนำเข้าข้อมูลไปยังฐานข้อมูลเรียลไทม์หรือโปรแกรมจำลอง Cloud Firestore โดยไม่ต้องทริกเกอร์ฟังก์ชันคลาวด์ที่จำลองในเครื่อง วิธีการนี้ใช้ได้กับ Firebase CLI เวอร์ชัน 8.13.0 ขึ้นไปเท่านั้น การโอเวอร์โหลดนี้จะใช้งานได้ก็ต่อเมื่อมีการระบุโฮสต์ฮับ Emulator: พอร์ตโดยตัวแปรสภาพแวดล้อม FIREBASE_EMULATOR_HUB
withFunctionTriggersDisabled (ฮับ fn) เรียกใช้ฟังก์ชันการตั้งค่าโดยปิดใช้ทริกเกอร์ Cloud Functions ในเบื้องหลัง ซึ่งสามารถใช้เพื่อนำเข้าข้อมูลไปยังฐานข้อมูลเรียลไทม์หรือโปรแกรมจำลอง Cloud Firestore โดยไม่ต้องทริกเกอร์ฟังก์ชันคลาวด์ที่จำลองในเครื่อง วิธีการนี้ใช้ได้กับ Firebase CLI เวอร์ชัน 8.13.0 ขึ้นไปเท่านั้น ฮับ ​​Emulator จะต้องทำงานอยู่ โดยมีการระบุโฮสต์และพอร์ตใดไว้ในโอเวอร์โหลดนี้

อินเทอร์เฟซ

อินเตอร์เฟซ คำอธิบาย
โฮสต์และพอร์ต อ็อบเจ็กต์ที่มีชื่อโฮสต์และหมายเลขพอร์ตของโปรแกรมจำลอง
กฎบริบทการทดสอบ บริบทการทดสอบที่แสดงถึงไคลเอนต์ สามารถใช้เพื่อเข้าถึงโปรแกรมจำลองสำหรับการทดสอบหน่วยกฎ
กฎการทดสอบสภาพแวดล้อม ออบเจ็กต์ที่ใช้ในการควบคุมสภาพแวดล้อมการทดสอบหน่วยกฎ สามารถใช้เพื่อสร้าง RulesTestContext สำหรับสถานการณ์การตรวจสอบสิทธิ์ที่แตกต่างกัน
ทดสอบสภาพแวดล้อมการกำหนดค่า การกำหนดค่าสภาพแวดล้อมการทดสอบหน่วย รวมถึงโปรแกรมจำลอง

พิมพ์นามแฝง

พิมพ์นามแฝง คำอธิบาย
EmulatorConfig การกำหนดค่าสำหรับโปรแกรมจำลองที่กำหนด
TokenOptions ตัวเลือกเพิ่มเติมสำหรับโทเค็นผู้ใช้จำลองที่จะใช้สำหรับการทดสอบ รวมถึงการอ้างสิทธิ์แบบกำหนดเองที่นักพัฒนาระบุ หรือการแทนที่ตัวเลือกสำหรับเพย์โหลดโทเค็น Firebase Auth

assertFails ()

ยืนยันคำมั่นสัญญาที่จะถูกปฏิเสธโดยมีข้อผิดพลาด "สิทธิ์ถูกปฏิเสธ"

มีประโยชน์ในการยืนยันคำขอบางอย่างที่ถูกปฏิเสธตามกฎความปลอดภัย ดูตัวอย่างด้านล่าง ฟังก์ชันนี้รับรู้ข้อผิดพลาดที่ถูกปฏิเสธสิทธิ์จาก Database, Firestore และ Storage JS SDK

ลายเซ็น:

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

พารามิเตอร์

พารามิเตอร์ พิมพ์ คำอธิบาย
ราคา สัญญา<ใดๆ> คำสัญญาที่จะยืนยัน

ผลตอบแทน:

สัญญา<ใดๆ>

คำสัญญาที่จะเกิดขึ้นหาก pr ถูกปฏิเสธด้วย "การอนุญาตถูกปฏิเสธ" หาก pr ถูกปฏิเสธโดยมีข้อผิดพลาดอื่นหรือได้รับการแก้ไขแล้ว สัญญาที่ส่งคืนจะปฏิเสธ

ตัวอย่าง

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

ยืนยันความสำเร็จ()

ยืนยันสัญญาว่าจะประสบความสำเร็จ

นี่เป็นฟังก์ชัน no-op ที่ส่งคืนสัญญาที่ส่งผ่านตามที่เป็นอยู่ แต่สามารถใช้เพื่อวัตถุประสงค์ด้านเอกสารในโค้ดทดสอบเพื่อเน้นว่าคำขอบางอย่างควรประสบความสำเร็จ (เช่น ได้รับอนุญาตตามกฎ)

ลายเซ็น:

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'), { ... });

เริ่มต้น TestEnvironment()

เริ่มต้นสภาพแวดล้อมการทดสอบสำหรับการทดสอบหน่วยกฎ เรียกใช้ฟังก์ชันนี้ก่อนเพื่อทดสอบการตั้งค่า

ต้องใช้โปรแกรมจำลองในการทำงาน ฟังก์ชันนี้จะพยายามค้นหาโปรแกรมจำลองเหล่านั้นผ่านตัวแปรสภาพแวดล้อมหรือผ่านฮับ Firebase Emulator หากไม่ได้ระบุโฮสต์และพอร์ต ขอแนะนำอย่างยิ่งให้ระบุกฎความปลอดภัยสำหรับโปรแกรมจำลองที่ใช้สำหรับการทดสอบ ดูตัวอย่างขั้นต่ำด้านล่าง

ลายเซ็น:

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

พารามิเตอร์

พารามิเตอร์ พิมพ์ คำอธิบาย
กำหนดค่า ทดสอบสภาพแวดล้อมการกำหนดค่า การกำหนดค่าสำหรับโปรแกรมจำลอง ฟิลด์ส่วนใหญ่เป็นทางเลือกหากสามารถค้นพบได้

ผลตอบแทน:

สัญญา < 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 โดยไม่ต้องทริกเกอร์ฟังก์ชันคลาวด์ที่จำลองในเครื่อง

วิธีการนี้ใช้ได้กับ Firebase CLI เวอร์ชัน 8.13.0 ขึ้นไปเท่านั้น การโอเวอร์โหลดนี้จะใช้งานได้ก็ต่อเมื่อมีการระบุโฮสต์ฮับ Emulator: พอร์ตโดยตัวแปรสภาพแวดล้อม FIREBASE_EMULATOR_HUB

ลายเซ็น:

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

พารามิเตอร์

พารามิเตอร์ พิมพ์ คำอธิบาย
เอฟเอ็น () => ผลลัพธ์ | สัญญา<TResult> ฟังก์ชั่นที่อาจซิงค์หรืออะซิงก์ (ส่งคืนสัญญา)

ผลตอบแทน:

สัญญา<TResult>

withFunctionTriggersDisabled ()

เรียกใช้ฟังก์ชันการตั้งค่าโดยปิดใช้ทริกเกอร์ Cloud Functions ในเบื้องหลัง ซึ่งสามารถใช้เพื่อนำเข้าข้อมูลไปยังฐานข้อมูลเรียลไทม์หรือโปรแกรมจำลอง Cloud Firestore โดยไม่ต้องทริกเกอร์ฟังก์ชันคลาวด์ที่จำลองในเครื่อง

วิธีการนี้ใช้ได้กับ 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} )
เอฟเอ็น () => ผลลัพธ์ | สัญญา<TResult> ฟังก์ชั่นที่อาจซิงค์หรืออะซิงก์ (ส่งคืนสัญญา)

ผลตอบแทน:

สัญญา<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;
};