เชื่อมต่อแอพของคุณกับ Cloud Firestore Emulator

ก่อนเชื่อมต่อแอปของคุณกับโปรแกรมจำลอง Cloud Firestore ตรวจสอบให้แน่ใจว่าคุณ เข้าใจเวิร์กโฟลว์ Firebase Local Emulator Suite โดยรวม และคุณ ติดตั้งและกำหนดค่า Local Emulator Suite และตรวจสอบ คำสั่ง CLI

เลือกโปรเจ็กต์ Firebase

Firebase Local Emulator Suite จำลองผลิตภัณฑ์สำหรับโปรเจ็กต์ Firebase เดียว

ในการเลือกโปรเจ็กต์ที่จะใช้ ก่อนที่คุณจะเริ่มอีมูเลเตอร์ ใน CLI ให้รัน firebase use ในไดเร็กทอรีการทำงานของคุณ หรือคุณสามารถส่ง --project แฟล็กไปยังแต่ละคำสั่งอีมูเลเตอร์

Local Emulator Suite รองรับการจำลองโปรเจ็กต์ Firebase จริง และโปรเจ็กต์ สาธิต

ประเภทโครงการ คุณสมบัติ ใช้กับอีมูเลเตอร์
จริง

โปรเจ็กต์ Firebase จริงคือโปรเจ็กต์ที่คุณสร้างและกำหนดค่า (ส่วนใหญ่ผ่านคอนโซล Firebase)

โปรเจ็กต์จริงมีทรัพยากรจริง เช่น อินสแตนซ์ฐานข้อมูล ที่เก็บข้อมูลของพื้นที่เก็บข้อมูล ฟังก์ชัน หรือทรัพยากรอื่นๆ ที่คุณตั้งค่าสำหรับโปรเจ็กต์ Firebase นั้น

เมื่อทำงานกับโปรเจ็กต์ Firebase จริง คุณสามารถเรียกใช้โปรแกรมจำลองสำหรับผลิตภัณฑ์ที่รองรับใดๆ หรือทั้งหมดได้

สำหรับผลิตภัณฑ์ใดๆ ที่คุณไม่ได้จำลอง แอปและโค้ดของคุณจะโต้ตอบกับทรัพยากรที่ใช้งาน อยู่ (อินสแตนซ์ฐานข้อมูล ที่เก็บข้อมูล ฟังก์ชัน ฯลฯ)

การสาธิต

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

รหัสโครงการสำหรับโครงการสาธิตมี demo- หน้าการสาธิต

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

เราขอแนะนำให้คุณใช้โปรเจ็กต์สาธิตในทุกที่ที่ทำได้ ประโยชน์รวมถึง:

  • ตั้งค่าได้ง่ายขึ้น เนื่องจากคุณสามารถเรียกใช้โปรแกรมจำลองได้โดยไม่ต้องสร้างโปรเจ็กต์ Firebase เลย
  • ความปลอดภัยที่เข้มงวดยิ่งขึ้น เนื่องจากหากรหัสของคุณเรียกใช้ทรัพยากรที่ไม่ได้จำลอง (การผลิต) โดยไม่ได้ตั้งใจ จะไม่มีโอกาสเปลี่ยนแปลงข้อมูล การใช้งาน และการเรียกเก็บเงิน
  • การสนับสนุนออฟไลน์ที่ดีขึ้น เนื่องจากไม่จำเป็นต้องเข้าถึงอินเทอร์เน็ตเพื่อดาวน์โหลดการกำหนดค่า SDK ของคุณ

เครื่องมือแอปของคุณเพื่อพูดคุยกับอีมูเลเตอร์

Android, แพลตฟอร์ม Apple และ Web SDK

ตั้งค่าการกำหนดค่าในแอปหรือคลาสทดสอบเพื่อโต้ตอบกับ Cloud Firestore ดังนี้

Android
        // 10.0.2.2 is the special IP address to connect to the 'localhost' of
        // the host computer from an Android emulator.
        FirebaseFirestore firestore = FirebaseFirestore.getInstance();
        firestore.useEmulator("10.0.2.2", 8080);

        FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
                .setPersistenceEnabled(false)
                .build();
        firestore.setFirestoreSettings(settings);
Swift
let settings = Firestore.firestore().settings
settings.host = "localhost:8080"
settings.isPersistenceEnabled = false 
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Web version 9

import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, 'localhost', 8080);

Web version 8

// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 8080);
}

ไม่จำเป็นต้องตั้งค่าเพิ่มเติมเพื่อทดสอบ Cloud Function ที่ท ริกเกอร์โดยเหตุการณ์ Firestore โดยใช้โปรแกรมจำลอง เมื่อทั้งตัวจำลอง Firestore และ Cloud Functions กำลังทำงาน ทั้งคู่จะทำงานร่วมกันโดยอัตโนมัติ

Admin SDKs

Firebase Admin SDK เชื่อมต่อกับโปรแกรมจำลอง Cloud Firestore โดยอัตโนมัติเมื่อตั้งค่าตัวแปรสภาพแวดล้อม FIRESTORE_EMULATOR_HOST :

export FIRESTORE_EMULATOR_HOST="localhost:8080"

หากโค้ดของคุณกำลังทำงานอยู่ในโปรแกรมจำลอง Cloud Functions ID โปรเจ็กต์ของคุณและการกำหนดค่าอื่นๆ จะถูกตั้งค่าโดยอัตโนมัติเมื่อเรียก initalizeApp

หากคุณต้องการให้โค้ด Admin SDK เชื่อมต่อกับโปรแกรมจำลองที่ใช้ร่วมกันที่ทำงานในสภาพแวดล้อมอื่น คุณจะต้องระบุ รหัสโปรเจ็กต์เดียวกันกับที่คุณตั้งค่าโดยใช้ Firebase CLI คุณสามารถส่งรหัสโปรเจ็กต์เพื่อ initializeApp แอปโดยตรงหรือตั้งค่าตัวแปรสภาพแวดล้อม GCLOUD_PROJECT

Node.js ผู้ดูแลระบบ SDK
admin.initializeApp({ projectId: "your-project-id" });
ตัวแปรสภาพแวดล้อม
export GCLOUD_PROJECT="your-project-id"

ล้างฐานข้อมูลของคุณระหว่างการทดสอบ

การผลิต Firestore ไม่มีวิธีการ SDK แพลตฟอร์มสำหรับการล้างฐานข้อมูล แต่ตัวจำลอง Firestore ให้จุดสิ้นสุด REST สำหรับวัตถุประสงค์นี้โดยเฉพาะ ซึ่งสามารถเรียกได้จากขั้นตอนการตั้งค่าเฟรมเวิร์กการทดสอบ/ขั้นตอนฉีกขาด จากคลาสทดสอบ หรือจากเชลล์ (เช่น , ด้วย curl ) ก่อนเริ่มการทดสอบ คุณสามารถใช้วิธีนี้เป็นทางเลือกแทนการปิดกระบวนการจำลอง

ในวิธีที่เหมาะสม ให้ดำเนินการ HTTP DELETE โดยระบุ Firebase projectID ของคุณ เช่น firestore-emulator-example ไปยังปลายทางต่อไปนี้:

"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

โดยปกติ รหัสของคุณควรรอการยืนยันว่าการล้างข้อมูลเสร็จสิ้นหรือล้มเหลว

คุณสามารถดำเนินการนี้ได้จากเชลล์:

// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

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

นำเข้าและส่งออกข้อมูล

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

firebase emulators:export ./dir

ในการทดสอบ เมื่อเริ่มต้นโปรแกรมจำลอง ให้นำเข้าข้อมูลพื้นฐาน

firebase emulators:start --import=./dir

คุณสามารถสั่งให้อีมูเลเตอร์เอ็กซ์พอร์ตข้อมูลเมื่อปิดระบบ ไม่ว่าจะระบุพาธเอ็กซ์พอร์ตหรือเพียงแค่ใช้พาธที่ส่งผ่านไปยังแฟ --import

firebase emulators:start --import=./dir --export-on-exit

ตัวเลือกการนำเข้าและส่งออกข้อมูลเหล่านี้ใช้ได้กับคำสั่ง firebase emulators:exec เช่นกัน สำหรับข้อมูลเพิ่มเติม โปรดดูการ อ้างอิงคำสั่งอีมู เลเตอร์

เห็นภาพกิจกรรมกฎความปลอดภัย

ในขณะที่คุณทำงานผ่านต้นแบบและลูปการทดสอบ คุณสามารถใช้เครื่องมือการแสดงภาพและรายงานที่จัดเตรียมโดย Local Emulator Suite

ใช้การตรวจสอบคำขอ

โปรแกรมจำลอง Cloud Firestore ช่วยให้คุณเห็นภาพคำขอของไคลเอ็นต์ใน Emulator Suite UI รวมถึงการติดตามการประเมินสำหรับกฎความปลอดภัยของ Firebase

เปิดแท็บ Firestore > คำขอ เพื่อดูลำดับการประเมินโดยละเอียดสำหรับแต่ละคำขอ

Firestore Emulator Requests Monitor แสดงการประเมินกฎความปลอดภัย

แสดงภาพรายงานการประเมินกฎ

เมื่อคุณเพิ่มกฎความปลอดภัยให้กับต้นแบบของคุณ คุณสามารถดีบักกฎเหล่านั้นด้วยเครื่องมือดีบัก Local Emulator Suite

หลังจากเรียกใช้ชุดการทดสอบแล้ว คุณจะเข้าถึงรายงานความครอบคลุมการทดสอบที่แสดงว่ากฎความปลอดภัยแต่ละข้อได้รับการประเมินอย่างไร

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

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

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

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage

ในที่นี้ รายงานเวอร์ชัน HTML เน้นการประเมินที่มีข้อผิดพลาดที่ไม่ได้กำหนดและค่าว่าง:

Cloud Firestore emulator แตกต่างจากการผลิตอย่างไร

Cloud Firestore Emulator พยายามจำลองพฤติกรรมของบริการที่ใช้งานจริงอย่างซื่อสัตย์โดยมีข้อจำกัดที่โดดเด่นบางประการ

ธุรกรรม

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

ดัชนี

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

ขีดจำกัด

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

อะไรต่อไป?

  • สำหรับชุดวิดีโอที่ได้รับการดูแลจัดการและตัวอย่างวิธีการโดยละเอียด ให้ทำตาม เพลย์ลิสต์การฝึกอบรม Firebase Emulators
  • ตรวจสอบกรณีการใช้งานขั้นสูงที่เกี่ยวข้องกับการทดสอบกฎความปลอดภัยและ Firebase Test SDK: ทดสอบกฎความปลอดภัย (Firestore)
  • เนื่องจากฟังก์ชันที่ทริกเกอร์เป็นการผสานรวมกับ Cloud Firestore ทั่วไป โปรดเรียนรู้เพิ่มเติมเกี่ยวกับ Cloud Functions for Firebase emulator ที่ ฟังก์ชัน Run ใน เครื่อง