ก่อนเชื่อมต่อแอปของคุณกับโปรแกรมจำลอง Cloud Firestore ตรวจสอบให้แน่ใจว่าคุณ เข้าใจเวิร์กโฟลว์ Firebase Local Emulator Suite โดยรวม และคุณ ได้ติดตั้งและกำหนด ค่า Local Emulator Suite และตรวจสอบ คำสั่ง CLI
เลือกโครงการ Firebase
Firebase Local Emulator Suite จำลองผลิตภัณฑ์สำหรับโปรเจ็กต์ Firebase เดียว
ในการเลือกโปรเจ็กต์ที่จะใช้ ก่อนที่คุณจะเริ่มโปรแกรมจำลอง ให้เรียก firebase use
ใน CLI ในไดเร็กทอรีการทำงานของคุณ หรือคุณสามารถส่งแฟล็ก --project
ไปยังแต่ละคำสั่งจำลอง
Local Emulator Suite รองรับการจำลองโครงการ Firebase จริง และโครงการ สาธิต
ประเภทโครงการ | คุณสมบัติ | ใช้กับอีมูเลเตอร์ |
---|---|---|
จริง | โครงการ Firebase จริงคือโครงการที่คุณสร้างและกำหนดค่า (น่าจะผ่านคอนโซล Firebase) โปรเจ็กต์จริงมีทรัพยากรที่ใช้งานอยู่ เช่น อินสแตนซ์ฐานข้อมูล ที่เก็บข้อมูล ฟังก์ชัน หรือทรัพยากรอื่นๆ ที่คุณตั้งค่าสำหรับโปรเจ็กต์ Firebase นั้น | เมื่อทำงานกับโปรเจ็กต์ Firebase จริง คุณสามารถเรียกใช้โปรแกรมจำลองสำหรับผลิตภัณฑ์ใดๆ หรือทั้งหมดที่รองรับ สำหรับผลิตภัณฑ์ใดๆ ที่คุณไม่ได้เลียนแบบ แอปและโค้ดของคุณจะโต้ตอบกับทรัพยากร ที่ใช้งานอยู่ (อินสแตนซ์ฐานข้อมูล บัคเก็ตพื้นที่เก็บข้อมูล ฟังก์ชัน ฯลฯ) |
การสาธิต | โครงการ Firebase สาธิตไม่มีการกำหนดค่า Firebase จริง และไม่มีทรัพยากรที่ใช้งานจริง โครงการเหล่านี้มักจะเข้าถึงได้ผ่าน codelabs หรือบทช่วยสอนอื่นๆ รหัสโครงการสำหรับโครงการสาธิตมีคำนำหน้า | เมื่อทำงานกับโปรเจ็กต์ Firebase สาธิต แอปและโค้ดของคุณจะโต้ตอบกับโปรแกรมจำลอง เท่านั้น หากแอปของคุณพยายามโต้ตอบกับทรัพยากรที่โปรแกรมจำลองไม่ได้ทำงานอยู่ โค้ดนั้นจะล้มเหลว |
เราขอแนะนำให้คุณใช้โครงการสาธิตหากเป็นไปได้ สิทธิประโยชน์รวมถึง:
- ตั้งค่าได้ง่ายขึ้น เนื่องจากคุณสามารถรันโปรแกรมจำลองได้โดยไม่ต้องสร้างโปรเจ็กต์ Firebase
- ความปลอดภัยที่แข็งแกร่งยิ่งขึ้น เนื่องจากหากรหัสของคุณเรียกใช้ทรัพยากรที่ไม่ได้จำลอง (การผลิต) โดยไม่ตั้งใจ จะไม่มีโอกาสที่ข้อมูลจะเปลี่ยนแปลง ใช้งาน และเรียกเก็บเงิน
- การสนับสนุนแบบออฟไลน์ที่ดีกว่า เนื่องจากไม่จำเป็นต้องเข้าถึงอินเทอร์เน็ตเพื่อดาวน์โหลดการกำหนดค่า SDK ของคุณ
เครื่องมือให้แอปของคุณพูดคุยกับผู้เลียนแบบ
แพลตฟอร์ม Android, Apple และ Web SDK
ตั้งค่าการกำหนดค่าในแอปหรือคลาสทดสอบเพื่อโต้ตอบกับ Cloud Firestore ดังนี้
Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val firestore = Firebase.firestore firestore.useEmulator("10.0.2.2", 8080) firestore.firestoreSettings = firestoreSettings { isPersistenceEnabled = false }
Java
// 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);
สวิฟต์
let settings = Firestore.firestore().settings settings.host = "localhost:8080" settings.isPersistenceEnabled = false settings.isSSLEnabled = false Firestore.firestore().settings = settings
Web modular API
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore"; // firebaseApps previously initialized using initializeApp() const db = getFirestore(); connectFirestoreEmulator(db, 'localhost', 8080);
Web namespaced API
// Firebase previously initialized using firebase.initializeApp(). var db = firebase.firestore(); if (location.hostname === "localhost") { db.useEmulator("localhost", 8080); }
ไม่จำเป็นต้องตั้งค่าเพิ่มเติมเพื่อทดสอบ Cloud Functions ที่ทริกเกอร์โดยเหตุการณ์ Firestore โดยใช้โปรแกรมจำลอง เมื่อทั้ง Firestore และ Cloud Functions emulators กำลังทำงาน ทั้งสองจะทำงานร่วมกันโดยอัตโนมัติ
Admin SDK
Firebase Admin SDK จะเชื่อมต่อกับโปรแกรมจำลอง Cloud Firestore โดยอัตโนมัติเมื่อตั้งค่าตัวแปรสภาพแวดล้อม FIRESTORE_EMULATOR_HOST
:
export FIRESTORE_EMULATOR_HOST="localhost:8080"
หากรหัสของคุณทำงานภายในโปรแกรมจำลอง Cloud Functions รหัสโครงการและการกำหนดค่าอื่นๆ ของคุณจะถูกตั้งค่าโดยอัตโนมัติเมื่อเรียกใช้ initalizeApp
หากต้องการให้โค้ด Admin SDK เชื่อมต่อกับโปรแกรมจำลองที่ใช้ร่วมกันซึ่งทำงานในสภาพแวดล้อมอื่น คุณจะต้องระบุ รหัสโปรเจ็กต์เดียวกับที่คุณตั้งค่าโดยใช้ Firebase CLI คุณสามารถส่งรหัสโปรเจ็กต์เพื่อ initializeApp
โดยตรงหรือตั้งค่าตัวแปรสภาพแวดล้อม GCLOUD_PROJECT
SDK ผู้ดูแลระบบ Node.js
admin.initializeApp({ projectId: "your-project-id" });
ตัวแปรสภาพแวดล้อม
export GCLOUD_PROJECT="your-project-id"
ล้างฐานข้อมูลของคุณระหว่างการทดสอบ
Production Firestore ไม่มีเมธอด SDK ของแพลตฟอร์มสำหรับการล้างฐานข้อมูล แต่ตัวจำลอง Firestore ให้จุดสิ้นสุด REST สำหรับวัตถุประสงค์นี้โดยเฉพาะ ซึ่งสามารถเรียกได้จากการตั้งค่ากรอบการทดสอบ/ขั้นตอนการแยกส่วน จากคลาสทดสอบ หรือจากเชลล์ (เช่น , กับ curl
) ก่อนที่การทดสอบจะเริ่มขึ้น คุณสามารถใช้วิธีนี้เป็นทางเลือกแทนการปิดกระบวนการอีมูเลเตอร์
ในวิธีการที่เหมาะสม ให้ดำเนินการ HTTP DELETE โดยระบุ Firebase projectID ของคุณ เช่น firestore-emulator-example
ไปยังปลายทางต่อไปนี้:
"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"
โดยปกติแล้ว โค้ดของคุณควรรอการยืนยันจาก REST ว่าการล้างข้อมูลเสร็จสิ้นหรือล้มเหลว
คุณสามารถดำเนินการนี้ได้จากเชลล์:
// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"
เมื่อดำเนินการตามขั้นตอนเช่นนี้แล้ว คุณสามารถจัดลำดับการทดสอบและทริกเกอร์ฟังก์ชันของคุณด้วยความมั่นใจว่าข้อมูลเก่าจะถูกลบออกระหว่างการรัน และคุณกำลังใช้การกำหนดค่าการทดสอบพื้นฐานใหม่
นำเข้าและส่งออกข้อมูล
ตัวจำลองฐานข้อมูลและ Cloud Storage สำหรับ Firebase ช่วยให้คุณสามารถส่งออกข้อมูลจากอินสแตนซ์ตัวจำลองที่กำลังทำงานอยู่ กำหนดชุดข้อมูลพื้นฐานเพื่อใช้ในการทดสอบหน่วยของคุณหรือเวิร์กโฟลว์การผสานรวมอย่างต่อเนื่อง จากนั้นส่งออกเพื่อแชร์ระหว่างทีม
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 > คำขอ เพื่อดูลำดับการประเมินโดยละเอียดสำหรับแต่ละคำขอ
แสดงภาพรายงานการประเมินกฎ
เมื่อคุณเพิ่มกฎความปลอดภัยให้กับต้นแบบของคุณ คุณสามารถดีบักได้ด้วยเครื่องมือดีบัก 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 ของรายงานเน้นการประเมินที่ส่งข้อผิดพลาดที่ไม่ได้กำหนดและค่า Null:
ตัวจำลอง Cloud Firestore แตกต่างจากเวอร์ชันที่ใช้งานจริงอย่างไร
Cloud Firestore Emulator พยายามจำลองพฤติกรรมของบริการที่ใช้งานจริงอย่างซื่อสัตย์โดยมีข้อจำกัดบางอย่างที่น่าสังเกต
การทำธุรกรรม
ขณะนี้โปรแกรมจำลองไม่ได้ใช้พฤติกรรมการทำธุรกรรมทั้งหมดที่เห็นในการผลิต เมื่อคุณทดสอบฟีเจอร์ที่เกี่ยวข้องกับการเขียนพร้อมกันหลายรายการในเอกสารเดียว โปรแกรมจำลองอาจดำเนินการตามคำขอเขียนให้เสร็จช้า ในบางกรณี อาจใช้เวลาถึง 30 วินาทีในการปลดล็อค พิจารณาปรับระยะหมดเวลาการทดสอบตามความเหมาะสม หากจำเป็น
ดัชนี
โปรแกรมจำลองไม่ได้ติดตามดัชนีผสมและจะดำเนินการค้นหาที่ถูกต้องแทน ตรวจสอบให้แน่ใจว่าได้ทดสอบแอปของคุณกับอินสแตนซ์ Cloud Firestore จริงเพื่อกำหนดดัชนีที่คุณต้องการ
ขีด จำกัด
โปรแกรมจำลองไม่ได้บังคับใช้ข้อจำกัดทั้งหมดที่บังคับใช้ในการผลิต ตัวอย่างเช่น โปรแกรมจำลองอาจอนุญาตธุรกรรมที่จะถูกปฏิเสธโดยบริการการผลิตที่ใหญ่เกินไป ตรวจสอบให้แน่ใจว่าคุณคุ้นเคยกับ ขีดจำกัดในเอกสาร และคุณได้ออกแบบแอปเพื่อหลีกเลี่ยงขีดจำกัดในเชิงรุก
อะไรต่อไป?
- สำหรับชุดวิดีโอที่คัดสรรมาอย่างดีและตัวอย่างวิธีใช้โดยละเอียด โปรดติดตาม เพลย์ลิสต์การฝึกอบรม Firebase Emulators
- ตรวจสอบกรณีการใช้งานขั้นสูงที่เกี่ยวข้องกับการทดสอบกฎความปลอดภัยและ Firebase Test SDK: ทดสอบกฎความปลอดภัย (Firestore)
- เนื่องจากฟังก์ชันที่ทริกเกอร์เป็นการผสานรวมกับ Cloud Firestore โดยทั่วไป เรียนรู้เพิ่มเติมเกี่ยวกับ Cloud Functions for Firebase emulator ได้ที่ เรียกใช้ฟังก์ชันในเครื่อง