Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

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

หากคุณไม่ได้อยู่แล้ว ตั้งค่า Firebase อีมูเลเตอร์

ก่อนที่คุณจะเรียกใช้โปรแกรมจำลอง

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

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

ความแตกต่างระหว่างตัวจำลองฐานข้อมูลและการผลิต

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

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

ผลิต Firebase เรียลไทม์เช่นฐานข้อมูลสามารถเข้าถึงได้โดเมนย่อยของ firebaseio.com และคุณสามารถเข้าถึง API REST เช่นนี้:

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 สัญกรณ์ ลักษณะการทำงานเกือบทั้งหมดที่คุณอาจต้องการทดสอบเกี่ยวข้องกับฟังก์ชันแบบอะซิงโครนัส และโมดูลการทดสอบได้รับการออกแบบให้ทำงานกับโค้ดแบบ Promise

ไลบรารีการทดสอบหน่วยกฎ 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
  • การตั้งค่าชุดทดสอบและต่อการทดสอบก่อน / หลังตะขอกับสายการทำความสะอาดข้อมูลการทดสอบและสิ่งแวดล้อมเช่น RulesTestEnvironment.cleanup() หรือ RulesTestEnvironment.clearFirestore()
  • การดำเนินการกรณีทดสอบที่รัฐรับรองความถูกต้องเลียนแบบโดยใช้ RulesTestEnvironment.authenticatedContext และ RulesTestEnvironment.unauthenticatedContext

วิธีการทั่วไปและฟังก์ชั่นยูทิลิตี้

ยังเห็น วิธีการทดสอบจำลองเฉพาะใน SDK v9

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 ซึ่งพฤติกรรมเช่นผู้ใช้รับรองความถูกต้องรับรองความถูกต้อง คำขอที่สร้างผ่านบริบทที่ส่งคืนจะมีโทเค็นการตรวจสอบสิทธิ์จำลองที่แนบมาด้วย หรือส่งผ่านอ็อบเจ็กต์ที่กำหนดการอ้างสิทธิ์หรือการแทนที่แบบกำหนดเองสำหรับเพย์โหลดโทเค็นการตรวจสอบสิทธิ์

ใช้วัตถุบริบทการทดสอบกลับมาในการทดสอบของคุณเพื่อเข้าถึงกรณีใด ๆ การกำหนดค่าจำลองรวมทั้งผู้ที่กำหนดค่าด้วย 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>

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

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

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

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

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

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

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

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

ยังเห็น วิธีการทดสอบทั่วไปและฟังก์ชั่นสาธารณูปโภคใน SDK v9

Cloud Firestore

Cloud Firestore

RulesTestEnvironment.clearFirestore() => Promise<void>

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

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

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

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

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

RulesTestEnvironment.clearDatabase() => Promise<void>

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

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

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

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

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

RulesTestEnvironment.clearStorage() => Promise<void>

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

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

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

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

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

Cloud Firestore

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 ที่เริ่มต้นซึ่งสอดคล้องกับชื่อฐานข้อมูลและการแทนที่ตัวแปร auth ที่ระบุในตัวเลือก

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

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

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

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

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

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

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

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

apps() => [FirebaseApp]

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

ใช้สิ่งนี้เพื่อล้างแอพระหว่างหรือหลังการทดสอบ (โปรดทราบว่าแอพที่เริ่มต้นพร้อมกับผู้ฟังที่ใช้งานอยู่จะป้องกันไม่ให้ 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 ที่เริ่มต้นซึ่งสอดคล้องกับชื่อที่เก็บข้อมูลของที่เก็บข้อมูลและการแทนที่ตัวแปร auth ที่ระบุในตัวเลือก

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]

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

ใช้สิ่งนี้เพื่อล้างแอพระหว่างหรือหลังการทดสอบ (โปรดทราบว่าแอพที่เริ่มต้นพร้อมกับผู้ฟังที่ใช้งานอยู่จะป้องกันไม่ให้ 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());

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

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

Cloud Firestore

Cloud Firestore

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 ที่เริ่มต้นซึ่งสอดคล้องกับชื่อฐานข้อมูลและการแทนที่ตัวแปร auth ที่ระบุในตัวเลือก

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

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

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

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

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

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

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

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

apps() => [FirebaseApp]

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

ใช้สิ่งนี้เพื่อล้างแอพระหว่างหรือหลังการทดสอบ (โปรดทราบว่าแอพที่เริ่มต้นพร้อมกับผู้ฟังที่ใช้งานอยู่จะป้องกันไม่ให้ 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 ที่เริ่มต้นซึ่งสอดคล้องกับชื่อที่เก็บข้อมูลของที่เก็บข้อมูลและการแทนที่ตัวแปร auth ที่ระบุในตัวเลือก

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]

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

ใช้สิ่งนี้เพื่อล้างแอพระหว่างหรือหลังการทดสอบ (โปรดทราบว่าแอพที่เริ่มต้นพร้อมกับผู้ฟังที่ใช้งานอยู่จะป้องกันไม่ให้ 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());