สร้างการทดสอบหน่วย

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

หากคุณยังไม่ได้ตั้งค่า ให้ตั้งค่า Firebase Emulators

ก่อนที่คุณจะรันโปรแกรมจำลอง

ก่อนที่คุณจะเริ่มใช้โปรแกรมจำลอง โปรดคำนึงถึงสิ่งต่อไปนี้:

  • ในตอนแรกโปรแกรมจำลองจะโหลดกฎที่ระบุในช่อง firestore.rules หรือ 'storage.rules' ของไฟล์ firebase.json ของคุณ หากไม่มีไฟล์อยู่และคุณไม่ได้ใช้เมธอด loadFirestoreRules หรือ 'loadStorageRules' ตามที่อธิบายไว้ด้านล่าง โปรแกรมจำลองจะถือว่าโปรเจ็กต์ทั้งหมดมีกฎแบบเปิด
  • แม้ว่า Firebase SDK ส่วนใหญ่ จะทำงานร่วมกับอีมูเลเตอร์โดยตรง แต่มีเพียง @firebase/rules-unit-testing ไลบรารี่เท่านั้นที่รองรับการจำลองการตรวจ auth ในกฎความปลอดภัย ทำให้การทดสอบหน่วยง่ายขึ้นมาก นอกจากนี้ ไลบรารียังรองรับฟีเจอร์เฉพาะของโปรแกรมจำลองบางอย่าง เช่น การล้างข้อมูลทั้งหมด ดังที่แสดงด้านล่าง
  • นอกจากนี้ โปรแกรมจำลองจะยอมรับโทเค็น Firebase Auth ที่ใช้งานจริงที่จัดทำผ่าน SDK ไคลเอ็นต์ และประเมินกฎตามลำดับ ซึ่งช่วยให้สามารถเชื่อมต่อแอปพลิเคชันของคุณกับโปรแกรมจำลองโดยตรงในการบูรณาการและการทดสอบด้วยตนเอง

ความแตกต่างระหว่างโปรแกรมจำลองฐานข้อมูลและการใช้งานจริง

  • คุณไม่จำเป็นต้องสร้างอินสแตนซ์ฐานข้อมูลอย่างชัดเจน โปรแกรมจำลองจะสร้างอินสแตนซ์ฐานข้อมูลใดๆ ที่เข้าถึงได้โดยอัตโนมัติ
  • ฐานข้อมูลใหม่แต่ละฐานข้อมูลเริ่มต้นด้วยกฎแบบปิด ดังนั้นผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบจะไม่สามารถอ่านหรือเขียนได้
  • ฐานข้อมูลจำลองแต่ละฐานข้อมูลจะใช้ขีดจำกัดและโควต้า ของแผน Spark (ที่โดดเด่นที่สุดคือ ซึ่งจะจำกัดแต่ละอินสแตนซ์ไว้ที่การเชื่อมต่อพร้อมกัน 100 รายการ)
  • ฐานข้อมูลใด ๆ จะยอมรับสตริง "owner" เป็นโทเค็นการตรวจสอบสิทธิ์ของผู้ดูแลระบบ
  • ขณะนี้โปรแกรมจำลองไม่มีการโต้ตอบการทำงานกับผลิตภัณฑ์ Firebase อื่นๆ น่าสังเกตว่าขั้นตอนการตรวจสอบสิทธิ์ Firebase ปกติไม่ทำงาน แต่คุณสามารถใช้เมธอด initializeTestApp() ในไลบรารี rules-unit-testing ซึ่งใช้ฟิลด์การตรวจ auth แทน ออบเจ็กต์ Firebase ที่สร้างขึ้นโดยใช้วิธีนี้จะทำงานเหมือนกับว่าได้ผ่านการรับรองความถูกต้องแล้วว่าเป็นเอนทิตีใดก็ตามที่คุณระบุ หากคุณส่งผ่าน null มันจะทำงานเป็นผู้ใช้ที่ไม่ได้รับการรับรองความถูกต้อง ( auth != null จะล้มเหลว เป็นต้น)

การโต้ตอบกับโปรแกรมจำลองฐานข้อมูลเรียลไทม์

อินสแตนซ์ Firebase Realtime Database ที่ใช้งานจริงสามารถเข้าถึงได้ที่โดเมนย่อยของ firebaseio.com และคุณสามารถเข้าถึง REST api ได้ดังนี้:

https://<database_name>.firebaseio.com/path/to/my/data.json

โปรแกรมจำลองทำงานภายในเครื่องและพร้อมใช้งานที่ localhost:9000 หากต้องการโต้ตอบกับอินสแตนซ์ฐานข้อมูลเฉพาะ คุณจะต้องใช้พารามิเตอร์การสืบค้น ns เพื่อระบุชื่อฐานข้อมูล

http://localhost:9000/path/to/my/data.json?ns=<database_name>

รันการทดสอบหน่วยในเครื่องด้วย JavaScript SDK เวอร์ชัน 9

Firebase เผยแพร่ไลบรารีการทดสอบหน่วยกฎความปลอดภัยด้วยทั้ง JavaScript SDK เวอร์ชัน 9 และ SDK เวอร์ชัน 8 API ของไลบรารีมีความแตกต่างกันอย่างมาก เราขอแนะนำไลบรารีการทดสอบ v9 ซึ่งมีประสิทธิภาพมากกว่าและต้องการการตั้งค่าน้อยกว่าในการเชื่อมต่อกับโปรแกรมจำลอง จึงหลีกเลี่ยงการใช้ทรัพยากรการผลิตโดยไม่ตั้งใจได้อย่างปลอดภัย เพื่อความเข้ากันได้แบบย้อนหลัง เรายังคงให้ บริการไลบรารีการทดสอบ v8 ต่อไป

ใช้โมดูล @firebase/rules-unit-testing เพื่อโต้ตอบกับโปรแกรมจำลองที่ทำงานในเครื่อง หากคุณได้รับข้อผิดพลาดการหมดเวลาหรือ ECONNREFUSED ให้ตรวจสอบอีกครั้งว่าโปรแกรมจำลองกำลังทำงานอยู่จริง

เราขอแนะนำอย่างยิ่งให้ใช้ Node.js เวอร์ชันล่าสุด เพื่อให้คุณสามารถใช้รูปแบบ async/await ได้ พฤติกรรมเกือบทั้งหมดที่คุณอาจต้องการทดสอบเกี่ยวข้องกับฟังก์ชันอะซิงโครนัส และโมดูลการทดสอบได้รับการออกแบบให้ทำงานกับโค้ดตามสัญญา

ไลบรารีการทดสอบกฎกฎ v9 รับรู้ถึงตัวจำลองอยู่เสมอและไม่เคยแตะต้องทรัพยากรการผลิตของคุณ

คุณนำเข้าไลบรารีโดยใช้คำสั่งการนำเข้าแบบโมดูลาร์ v9 ตัวอย่างเช่น:

import {
  assertFails,
  assertSucceeds,
  initializeTestEnvironment,
  RulesTestEnvironment,
} from "@firebase/rules-unit-testing"

// Use `const { … } = require("@firebase/rules-unit-testing")` if imports are not supported
// Or we suggest `const testing = require("@firebase/rules-unit-testing")` if necessary.

เมื่อนำเข้าแล้ว การดำเนินการทดสอบหน่วยจะเกี่ยวข้องกับ:

  • การสร้างและกำหนดค่า RulesTestEnvironment ด้วยการเรียกเพื่อ initializeTestEnvironment
  • การตั้งค่าข้อมูลทดสอบโดยไม่ต้องเรียกใช้กฎ โดยใช้วิธีอำนวยความสะดวกที่ช่วยให้คุณสามารถข้ามกฎเหล่านั้นได้ชั่วคราว RulesTestEnvironment.withSecurityRulesDisabled
  • การตั้งค่าชุดการทดสอบและการทดสอบต่อก่อน/หลัง hooks ด้วยการเรียกเพื่อล้างข้อมูลการทดสอบและสภาพแวดล้อม เช่น RulesTestEnvironment.cleanup() หรือ RulesTestEnvironment.clearFirestore()
  • การใช้กรณีทดสอบที่เลียนแบบสถานะการตรวจสอบสิทธิ์โดยใช้ RulesTestEnvironment.authenticatedContext และ RulesTestEnvironment.unauthenticatedContext

วิธีการทั่วไปและฟังก์ชันอรรถประโยชน์

ดู วิธีทดสอบเฉพาะโปรแกรมจำลองโดยใช้ API แบบโมดูลาร์

initializeTestEnvironment() => RulesTestEnvironment

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

ฟังก์ชันยอมรับออบเจ็กต์ทางเลือกที่กำหนด TestEnvironmentConfig ซึ่งอาจประกอบด้วยรหัสโปรเจ็กต์และการตั้งค่าการกำหนดค่าโปรแกรมจำลอง

let testEnv = await initializeTestEnvironment({
  projectId: "demo-project-1234",
  firestore: {
    rules: fs.readFileSync("firestore.rules", "utf8"),
  },
});

RulesTestEnvironment.authenticatedContext({ user_id: string, tokenOptions?: TokenOptions }) => RulesTestContext

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

ใช้ออบเจ็กต์บริบทการทดสอบที่ส่งคืนในการทดสอบของคุณเพื่อเข้าถึงอินสแตนซ์ตัวจำลองที่กำหนดค่าไว้ รวมถึงอินสแตนซ์ที่กำหนดค่าด้วย initializeTestEnvironment

// Assuming a Firestore app and the Firestore emulator for this example
import { setDoc } from "firebase/firestore";

const alice = testEnv.authenticatedContext("alice", { … });
// Use the Firestore instance associated with this context
await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });

RulesTestEnvironment.unauthenticatedContext() => RulesTestContext

เมธอดนี้จะสร้าง RulesTestContext ซึ่งทำงานเหมือนกับไคลเอ็นต์ที่ไม่ได้เข้าสู่ระบบผ่านการรับรองความถูกต้อง คำขอที่สร้างผ่านบริบทที่ส่งคืนจะไม่มีการแนบโทเค็น Firebase Auth

ใช้ออบเจ็กต์บริบทการทดสอบที่ส่งคืนในการทดสอบของคุณเพื่อเข้าถึงอินสแตนซ์ตัวจำลองที่กำหนดค่าไว้ รวมถึงอินสแตนซ์ที่กำหนดค่าด้วย initializeTestEnvironment

// Assuming a Cloud Storage app and the Storage emulator for this example
import { getStorage, ref, deleteObject } from "firebase/storage";

const alice = testEnv.unauthenticatedContext();

// Use the Cloud Storage instance associated with this context
const desertRef = ref(alice.storage(), 'images/desert.jpg');
await assertSucceeds(deleteObject(desertRef));

RulesTestEnvironment.withSecurityRulesDisabled()

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

เมธอดนี้ใช้ฟังก์ชันการโทรกลับ ซึ่งรับบริบทการเลี่ยงกฎความปลอดภัยและส่งกลับสัญญา บริบทจะถูกทำลายเมื่อคำสัญญาแก้ไข/ปฏิเสธ

RulesTestEnvironment.cleanup()

เมธอดนี้จะทำลาย RulesTestContexts ทั้งหมดที่สร้างขึ้นในสภาพแวดล้อมการทดสอบ และล้างทรัพยากรพื้นฐาน เพื่อให้สามารถออกจากระบบได้อย่างสมบูรณ์

วิธีนี้ไม่เปลี่ยนสถานะของอีมูเลเตอร์แต่อย่างใด หากต้องการรีเซ็ตข้อมูลระหว่างการทดสอบ ให้ใช้วิธีการล้างข้อมูลเฉพาะโปรแกรมจำลองแอปพลิเคชัน

assertSucceeds(pr: Promise<any>)) => Promise<any>

นี่คือฟังก์ชันยูทิลิตี้กรณีทดสอบ

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

await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });

assertFails(pr: Promise<any>)) => Promise<any>

นี่คือฟังก์ชันยูทิลิตี้กรณีทดสอบ

ฟังก์ชันยืนยันว่าสัญญาที่ให้มาซึ่งห่อการดำเนินการจำลองจะถูกปฏิเสธโดยมีการละเมิดกฎความปลอดภัย

await assertFails(setDoc(alice.firestore(), '/users/bob'), { ... });

วิธีการเฉพาะของโปรแกรมจำลอง

ดู วิธีทดสอบทั่วไปและฟังก์ชันยูทิลิตี้โดยใช้ API แบบโมดูลาร์

คลาวด์ไฟร์สโตร์

คลาวด์ไฟร์สโตร์

RulesTestEnvironment.clearFirestore() => Promise<void>

วิธีนี้จะล้างข้อมูลในฐานข้อมูล Firestore ที่เป็นของ projectId ที่กำหนดค่าไว้สำหรับโปรแกรมจำลอง Firestore

RulesTestContext.firestore(settings?: Firestore.FirestoreSettings) => Firestore;

เมธอดนี้รับอินสแตนซ์ Firestore สำหรับบริบทการทดสอบนี้ อินสแตนซ์ Firebase JS Client SDK ที่ส่งคืนสามารถใช้กับ API ของไคลเอ็นต์ SDK ได้ (โมดูลาร์ v9 หรือความเข้ากันได้ v9)

ฐานข้อมูลเรียลไทม์

ฐานข้อมูลเรียลไทม์

RulesTestEnvironment.clearDatabase() => Promise<void>

วิธีนี้จะล้างข้อมูลในฐานข้อมูลเรียลไทม์ที่เป็นของ projectId ที่กำหนดค่าไว้สำหรับโปรแกรมจำลองฐานข้อมูลเรียลไทม์

RulesTestContext.database(databaseURL?: Firestore.FirestoreSettings) => Firestore;

รับอินสแตนซ์ฐานข้อมูลเรียลไทม์สำหรับบริบทการทดสอบนี้ อินสแตนซ์ Firebase JS Client SDK ที่ส่งคืนสามารถใช้กับ API ของ SDK ไคลเอ็นต์ได้ (แบบแยกส่วนหรือเนมสเปซ เวอร์ชัน 9 หรือสูงกว่า) วิธีการนี้ยอมรับ URL ของอินสแตนซ์ฐานข้อมูลเรียลไทม์ หากระบุไว้ จะส่งคืนอินสแตนซ์สำหรับเนมสเปซเวอร์ชันจำลองพร้อมพารามิเตอร์ที่แยกจาก URL

การจัดเก็บเมฆ

การจัดเก็บเมฆ

RulesTestEnvironment.clearStorage() => Promise<void>

เมธอดนี้จะล้างออบเจ็กต์และข้อมูลเมตาในที่เก็บข้อมูลของพื้นที่เก็บ projectId ที่กำหนดค่าไว้สำหรับโปรแกรมจำลอง Cloud Storage

RulesTestContext.storage(bucketUrl?: string) => Firebase Storage;

วิธีนี้จะส่งคืนอินสแตนซ์พื้นที่เก็บข้อมูลที่กำหนดค่าให้เชื่อมต่อกับโปรแกรมจำลอง วิธีการนี้ยอมรับ gs:// url ไปยัง Firebase Storage Bucket เพื่อทำการทดสอบ หากระบุ จะส่งคืนอินสแตนซ์พื้นที่เก็บข้อมูลสำหรับเวอร์ชันจำลองของชื่อบัคเก็ต

รันการทดสอบหน่วยในเครื่องด้วย JavaScript SDK v8

เลือกผลิตภัณฑ์เพื่อดูวิธีที่ Firebase Test SDK ใช้เพื่อเชื่อมต่อกับโปรแกรมจำลอง

คลาวด์ไฟร์สโตร์

initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp

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

firebase.initializeTestApp({
  projectId: "my-test-project",
  auth: { uid: "alice", email: "alice@example.com" }
});

initializeAdminApp({ projectId: string }) => FirebaseApp

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

firebase.initializeAdminApp({ projectId: "my-test-project" });
    

apps() => [FirebaseApp] วิธีการนี้จะส่งคืนแอปทดสอบและผู้ดูแลระบบที่เริ่มต้นในปัจจุบันทั้งหมด ใช้สิ่งนี้เพื่อล้างแอพระหว่างหรือหลังการทดสอบ

Promise.all(firebase.apps().map(app => app.delete()))

loadFirestoreRules({ projectId: string, rules: Object }) => Promise

วิธีการนี้จะส่งกฎไปยังฐานข้อมูลที่ทำงานอยู่ในเครื่อง ใช้วัตถุที่ระบุกฎเป็นสตริง ใช้วิธีนี้เพื่อกำหนดกฎของฐานข้อมูลของคุณ

firebase.loadFirestoreRules({
  projectId: "my-test-project",
  rules: fs.readFileSync("/path/to/firestore.rules", "utf8")
});
    

assertFails(pr: Promise) => Promise

เมธอดนี้ส่งคืนสัญญาที่ถูกปฏิเสธหากอินพุตสำเร็จหรือสำเร็จหากอินพุตถูกปฏิเสธ ใช้สิ่งนี้เพื่อยืนยันว่าการอ่านหรือเขียนฐานข้อมูลล้มเหลว

firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
    

assertSucceeds(pr: Promise) => Promise

เมธอดนี้ส่งคืนสัญญาที่จะสำเร็จหากอินพุตสำเร็จ และจะถูกปฏิเสธหากอินพุตถูกปฏิเสธ ใช้สิ่งนี้เพื่อยืนยันว่าฐานข้อมูลอ่านหรือเขียนสำเร็จหรือไม่

firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
    

clearFirestoreData({ projectId: string }) => Promise

วิธีนี้จะล้างข้อมูลทั้งหมดที่เกี่ยวข้องกับโปรเจ็กต์เฉพาะในอินสแตนซ์ Firestore ที่รันในเครื่อง ใช้วิธีนี้เพื่อทำความสะอาดหลังการทดสอบ

firebase.clearFirestoreData({
  projectId: "my-test-project"
});
   

ฐานข้อมูลเรียลไทม์

ฐานข้อมูลเรียลไทม์

initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp

ใช้สิ่งนี้เพื่อสร้างแอปที่ได้รับการตรวจสอบสิทธิ์เป็นผู้ใช้เฉพาะเพื่อใช้ในการทดสอบ

ส่งคืนแอป Firebase ที่เตรียมใช้งานแล้วซึ่งสอดคล้องกับชื่อฐานข้อมูลและการแทนที่ตัวแปรการรับรองความถูกต้องที่ระบุในตัวเลือก

firebase.initializeTestApp({
  databaseName: "my-database",
  auth: { uid: "alice" }
});

initializeAdminApp({ databaseName: string }) => FirebaseApp

ใช้สิ่งนี้เพื่อสร้างแอปที่ได้รับการตรวจสอบสิทธิ์ในฐานะผู้ดูแลระบบเพื่อตั้งค่าสถานะสำหรับการทดสอบ

ส่งคืนแอป Firebase ของผู้ดูแลระบบที่เริ่มต้นซึ่งสอดคล้องกับชื่อฐานข้อมูลที่ระบุในตัวเลือก แอพนี้ข้ามกฎความปลอดภัยเมื่ออ่านและเขียนลงฐานข้อมูล

firebase.initializeAdminApp({ databaseName: "my-database" });

loadDatabaseRules({ databaseName: string, rules: Object }) => Promise

ใช้สิ่งนี้เพื่อกำหนดกฎของฐานข้อมูลของคุณ

ส่งกฎไปยังฐานข้อมูลที่ทำงานในเครื่อง รับวัตถุตัวเลือกที่ระบุ "ชื่อฐานข้อมูล" และ "กฎ" ของคุณเป็นสตริง

firebase
      .loadDatabaseRules({
        databaseName: "my-database",
        rules: "{'rules': {'.read': false, '.write': false}}"
      });

apps() => [FirebaseApp]

ส่งคืนแอปทดสอบและผู้ดูแลระบบที่เริ่มต้นในปัจจุบันทั้งหมด

ใช้สิ่งนี้เพื่อล้างแอประหว่างหรือหลังการทดสอบ (โปรดทราบว่าแอปที่เตรียมใช้งานด้วย Listener ที่ใช้งานอยู่จะป้องกันไม่ให้ JavaScript ออก):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

ส่งกลับคำสัญญาที่ถูกปฏิเสธหากอินพุตสำเร็จ และส่งคืนสัญญาที่ถูกปฏิเสธหากอินพุตถูกปฏิเสธ

ใช้สิ่งนี้เพื่อยืนยันว่าการอ่านหรือเขียนฐานข้อมูลล้มเหลว:

firebase.assertFails(app.database().ref("secret").once("value"));

assertSucceeds(pr: Promise) => Promise

ส่งกลับคำสัญญาว่าจะสำเร็จหากอินพุตสำเร็จ และจะถูกปฏิเสธหากอินพุตถูกปฏิเสธ

ใช้สิ่งนี้เพื่อยืนยันว่าฐานข้อมูลอ่านหรือเขียนสำเร็จ:

firebase.assertSucceeds(app.database().ref("public").once("value"));

การจัดเก็บเมฆ

การจัดเก็บเมฆ

initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp

ใช้สิ่งนี้เพื่อสร้างแอปที่ได้รับการตรวจสอบสิทธิ์เป็นผู้ใช้เฉพาะเพื่อใช้ในการทดสอบ

ส่งคืนแอป Firebase ที่เริ่มต้นซึ่งสอดคล้องกับชื่อที่เก็บข้อมูลและการแทนที่ตัวแปรการรับรองความถูกต้องที่ระบุในตัวเลือก

firebase.initializeTestApp({
  storageBucket: "my-bucket",
  auth: { uid: "alice" }
});

initializeAdminApp({ storageBucket: string }) => FirebaseApp

ใช้สิ่งนี้เพื่อสร้างแอปที่ได้รับการตรวจสอบสิทธิ์ในฐานะผู้ดูแลระบบเพื่อตั้งค่าสถานะสำหรับการทดสอบ

ส่งคืนแอป Firebase ของผู้ดูแลระบบที่เริ่มต้นซึ่งสอดคล้องกับชื่อที่เก็บข้อมูลที่ระบุในตัวเลือก แอปนี้จะข้ามกฎความปลอดภัยเมื่ออ่านและเขียนลงในที่เก็บข้อมูล

firebase.initializeAdminApp({ storageBucket: "my-bucket" });

loadStorageRules({ storageBucket: string, rules: Object }) => Promise

ใช้สิ่งนี้เพื่อตั้งกฎของที่เก็บข้อมูลของคุณ

ส่งกฎไปยังที่เก็บข้อมูลของพื้นที่เก็บข้อมูลที่มีการจัดการในเครื่อง รับวัตถุตัวเลือกที่ระบุ "storageBucket" และ "กฎ" ของคุณเป็นสตริง

firebase
      .loadStorageRules({
        storageBucket: "my-bucket",
        rules: fs.readFileSync("/path/to/storage.rules", "utf8")
      });

apps() => [FirebaseApp]

ส่งคืนแอปทดสอบและผู้ดูแลระบบที่เริ่มต้นในปัจจุบันทั้งหมด

ใช้สิ่งนี้เพื่อล้างแอประหว่างหรือหลังการทดสอบ (โปรดทราบว่าแอปที่เตรียมใช้งานด้วย Listener ที่ใช้งานอยู่จะป้องกันไม่ให้ JavaScript ออก):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

ส่งกลับคำสัญญาที่ถูกปฏิเสธหากอินพุตสำเร็จ และส่งคืนสัญญาที่ถูกปฏิเสธหากอินพุตถูกปฏิเสธ

ใช้สิ่งนี้เพื่อยืนยันว่าที่เก็บข้อมูลการอ่านหรือเขียนล้มเหลว:

firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());

assertSucceeds(pr: Promise) => Promise

ส่งกลับคำสัญญาว่าจะสำเร็จหากอินพุตสำเร็จ และจะถูกปฏิเสธหากอินพุตถูกปฏิเสธ

ใช้สิ่งนี้เพื่อยืนยันว่าที่เก็บข้อมูลการอ่านหรือเขียนสำเร็จ:

firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());

RUT ไลบรารี API สำหรับ JS SDK v8

เลือกผลิตภัณฑ์เพื่อดูวิธีที่ Firebase Test SDK ใช้เพื่อเชื่อมต่อกับโปรแกรมจำลอง

คลาวด์ไฟร์สโตร์

คลาวด์ไฟร์สโตร์

initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp

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

firebase.initializeTestApp({
  projectId: "my-test-project",
  auth: { uid: "alice", email: "alice@example.com" }
});

initializeAdminApp({ projectId: string }) => FirebaseApp

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

firebase.initializeAdminApp({ projectId: "my-test-project" });
    

apps() => [FirebaseApp] วิธีการนี้จะส่งคืนแอปทดสอบและผู้ดูแลระบบที่เริ่มต้นในปัจจุบันทั้งหมด ใช้สิ่งนี้เพื่อล้างแอพระหว่างหรือหลังการทดสอบ

Promise.all(firebase.apps().map(app => app.delete()))

loadFirestoreRules({ projectId: string, rules: Object }) => Promise

วิธีการนี้จะส่งกฎไปยังฐานข้อมูลที่ทำงานอยู่ในเครื่อง ใช้วัตถุที่ระบุกฎเป็นสตริง ใช้วิธีนี้เพื่อกำหนดกฎของฐานข้อมูลของคุณ

firebase.loadFirestoreRules({
  projectId: "my-test-project",
  rules: fs.readFileSync("/path/to/firestore.rules", "utf8")
});
    

assertFails(pr: Promise) => Promise

เมธอดนี้ส่งคืนสัญญาที่ถูกปฏิเสธหากอินพุตสำเร็จหรือสำเร็จหากอินพุตถูกปฏิเสธ ใช้สิ่งนี้เพื่อยืนยันว่าการอ่านหรือเขียนฐานข้อมูลล้มเหลว

firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
    

assertSucceeds(pr: Promise) => Promise

เมธอดนี้ส่งคืนสัญญาที่จะสำเร็จหากอินพุตสำเร็จ และจะถูกปฏิเสธหากอินพุตถูกปฏิเสธ ใช้สิ่งนี้เพื่อยืนยันว่าฐานข้อมูลอ่านหรือเขียนสำเร็จหรือไม่

firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
    

clearFirestoreData({ projectId: string }) => Promise

วิธีนี้จะล้างข้อมูลทั้งหมดที่เกี่ยวข้องกับโปรเจ็กต์เฉพาะในอินสแตนซ์ Firestore ที่รันในเครื่อง ใช้วิธีนี้เพื่อทำความสะอาดหลังการทดสอบ

firebase.clearFirestoreData({
  projectId: "my-test-project"
});
   

ฐานข้อมูลเรียลไทม์

ฐานข้อมูลเรียลไทม์

initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp

ใช้สิ่งนี้เพื่อสร้างแอปที่ได้รับการตรวจสอบสิทธิ์เป็นผู้ใช้เฉพาะเพื่อใช้ในการทดสอบ

ส่งคืนแอป Firebase ที่เตรียมใช้งานแล้วซึ่งสอดคล้องกับชื่อฐานข้อมูลและการแทนที่ตัวแปรการรับรองความถูกต้องที่ระบุในตัวเลือก

firebase.initializeTestApp({
  databaseName: "my-database",
  auth: { uid: "alice" }
});

initializeAdminApp({ databaseName: string }) => FirebaseApp

ใช้สิ่งนี้เพื่อสร้างแอปที่ได้รับการตรวจสอบสิทธิ์ในฐานะผู้ดูแลระบบเพื่อตั้งค่าสถานะสำหรับการทดสอบ

ส่งคืนแอป Firebase ของผู้ดูแลระบบที่เริ่มต้นซึ่งสอดคล้องกับชื่อฐานข้อมูลที่ระบุในตัวเลือก แอพนี้ข้ามกฎความปลอดภัยเมื่ออ่านและเขียนลงฐานข้อมูล

firebase.initializeAdminApp({ databaseName: "my-database" });

loadDatabaseRules({ databaseName: string, rules: Object }) => Promise

ใช้สิ่งนี้เพื่อกำหนดกฎของฐานข้อมูลของคุณ

ส่งกฎไปยังฐานข้อมูลที่ทำงานในเครื่อง รับวัตถุตัวเลือกที่ระบุ "ชื่อฐานข้อมูล" และ "กฎ" ของคุณเป็นสตริง

firebase
      .loadDatabaseRules({
        databaseName: "my-database",
        rules: "{'rules': {'.read': false, '.write': false}}"
      });

apps() => [FirebaseApp]

ส่งคืนแอปทดสอบและผู้ดูแลระบบที่เริ่มต้นในปัจจุบันทั้งหมด

ใช้สิ่งนี้เพื่อล้างแอประหว่างหรือหลังการทดสอบ (โปรดทราบว่าแอปที่เตรียมใช้งานด้วย Listener ที่ใช้งานอยู่จะป้องกันไม่ให้ JavaScript ออก):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

ส่งกลับคำสัญญาที่ถูกปฏิเสธหากอินพุตสำเร็จ และส่งคืนสัญญาที่ถูกปฏิเสธหากอินพุตถูกปฏิเสธ

ใช้สิ่งนี้เพื่อยืนยันว่าการอ่านหรือเขียนฐานข้อมูลล้มเหลว:

firebase.assertFails(app.database().ref("secret").once("value"));

assertSucceeds(pr: Promise) => Promise

ส่งกลับคำสัญญาว่าจะสำเร็จหากอินพุตสำเร็จ และจะถูกปฏิเสธหากอินพุตถูกปฏิเสธ

ใช้สิ่งนี้เพื่อยืนยันว่าฐานข้อมูลอ่านหรือเขียนสำเร็จ:

firebase.assertSucceeds(app.database().ref("public").once("value"));

การจัดเก็บเมฆ

การจัดเก็บเมฆ

initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp

ใช้สิ่งนี้เพื่อสร้างแอปที่ได้รับการตรวจสอบสิทธิ์เป็นผู้ใช้เฉพาะเพื่อใช้ในการทดสอบ

ส่งคืนแอป Firebase ที่เริ่มต้นซึ่งสอดคล้องกับชื่อที่เก็บข้อมูลและการแทนที่ตัวแปรการรับรองความถูกต้องที่ระบุในตัวเลือก

firebase.initializeTestApp({
  storageBucket: "my-bucket",
  auth: { uid: "alice" }
});

initializeAdminApp({ storageBucket: string }) => FirebaseApp

ใช้สิ่งนี้เพื่อสร้างแอปที่ได้รับการตรวจสอบสิทธิ์ในฐานะผู้ดูแลระบบเพื่อตั้งค่าสถานะสำหรับการทดสอบ

ส่งคืนแอป Firebase ของผู้ดูแลระบบที่เริ่มต้นซึ่งสอดคล้องกับชื่อที่เก็บข้อมูลที่ระบุในตัวเลือก แอปนี้จะข้ามกฎความปลอดภัยเมื่ออ่านและเขียนลงในที่เก็บข้อมูล

firebase.initializeAdminApp({ storageBucket: "my-bucket" });

loadStorageRules({ storageBucket: string, rules: Object }) => Promise

ใช้สิ่งนี้เพื่อตั้งกฎของที่เก็บข้อมูลของคุณ

ส่งกฎไปยังที่เก็บข้อมูลของพื้นที่เก็บข้อมูลที่มีการจัดการในเครื่อง รับวัตถุตัวเลือกที่ระบุ "storageBucket" และ "กฎ" ของคุณเป็นสตริง

firebase
      .loadStorageRules({
        storageBucket: "my-bucket",
        rules: fs.readFileSync("/path/to/storage.rules", "utf8")
      });

apps() => [FirebaseApp]

ส่งคืนแอปทดสอบและผู้ดูแลระบบที่เริ่มต้นในปัจจุบันทั้งหมด

ใช้สิ่งนี้เพื่อล้างแอประหว่างหรือหลังการทดสอบ (โปรดทราบว่าแอปที่เตรียมใช้งานด้วย Listener ที่ใช้งานอยู่จะป้องกันไม่ให้ JavaScript ออก):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

ส่งกลับคำสัญญาที่ถูกปฏิเสธหากอินพุตสำเร็จ และส่งคืนสัญญาที่ถูกปฏิเสธหากอินพุตถูกปฏิเสธ

ใช้สิ่งนี้เพื่อยืนยันว่าที่เก็บข้อมูลการอ่านหรือเขียนล้มเหลว:

firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());

assertSucceeds(pr: Promise) => Promise

ส่งกลับคำสัญญาว่าจะสำเร็จหากอินพุตสำเร็จ และจะถูกปฏิเสธหากอินพุตถูกปฏิเสธ

ใช้สิ่งนี้เพื่อยืนยันว่าที่เก็บข้อมูลการอ่านหรือเขียนสำเร็จ:

firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());