ก่อนเชื่อมต่อแอปกับโปรแกรมจำลอง Cloud Firestore ให้ตรวจสอบว่าคุณเข้าใจเวิร์กโฟลว์โดยรวมของ Firebase Local Emulator Suite และติดตั้งและกำหนดค่า Local Emulator Suite รวมถึงตรวจสอบคําสั่ง CLI ของ Local Emulator Suite
เลือกโปรเจ็กต์ Firebase
Firebase Local Emulator Suite จะจําลองผลิตภัณฑ์สําหรับโปรเจ็กต์ Firebase โปรเจ็กต์เดียว
หากต้องการเลือกโปรเจ็กต์ที่จะใช้ ก่อนเริ่มโปรแกรมจำลอง ให้เรียกใช้ firebase use
ใน CLI ในไดเรกทอรีทํางาน หรือจะส่งผ่าน Flag --project
ไปยังคำสั่งของโปรแกรมจำลองแต่ละรายการก็ได้
Local Emulator Suite รองรับการจําลองโปรเจ็กต์ Firebase จริงและโปรเจ็กต์สาธิต
ประเภทโปรเจ็กต์ | ฟีเจอร์ | ใช้กับโปรแกรมจำลอง |
---|---|---|
จริง |
โปรเจ็กต์ Firebase จริงคือโปรเจ็กต์ที่คุณสร้างและกำหนดค่า (ส่วนใหญ่จะผ่านFirebaseคอนโซล) โปรเจ็กต์จริงมีทรัพยากรที่ใช้งานอยู่ เช่น อินสแตนซ์ฐานข้อมูลที่เก็บข้อมูล ฟังก์ชัน หรือทรัพยากรอื่นๆ ที่คุณตั้งค่าไว้สําหรับโปรเจ็กต์ Firebase นั้น |
เมื่อทํางานกับโปรเจ็กต์ Firebase จริง คุณสามารถเรียกใช้โปรแกรมจําลองสําหรับผลิตภัณฑ์ที่รองรับรายการใดรายการหนึ่งหรือทั้งหมด สำหรับผลิตภัณฑ์ที่คุณไม่ได้จําลอง แอปและโค้ดจะโต้ตอบกับทรัพยากรจริง (อินสแตนซ์ฐานข้อมูล ที่เก็บข้อมูล ฟังก์ชัน ฯลฯ) |
เดโม |
โปรเจ็กต์ Firebase สาธิตไม่มีการกำหนดค่า Firebase จริงและไม่มีทรัพยากรที่ใช้งานอยู่ โดยปกติแล้วโปรเจ็กต์เหล่านี้จะเข้าถึงได้ผ่าน Codelab หรือบทแนะนำอื่นๆ รหัสโปรเจ็กต์ของโปรเจ็กต์เดโมจะมีคำนำหน้า |
เมื่อใช้โปรเจ็กต์ Firebase สาธิต แอปและโค้ดจะโต้ตอบกับโปรแกรมจำลองเท่านั้น หากแอปพยายามโต้ตอบกับทรัพยากรที่อีมูเลเตอร์ไม่ได้ทำงานอยู่ โค้ดดังกล่าวจะใช้งานไม่ได้ |
เราขอแนะนำให้คุณใช้โปรเจ็กต์สาธิตทุกครั้งที่ทำได้ สิทธิประโยชน์มีดังนี้
- ตั้งค่าได้ง่ายขึ้นเนื่องจากคุณสามารถเรียกใช้โปรแกรมจำลองได้โดยไม่ต้องสร้างโปรเจ็กต์ Firebase
- ความปลอดภัยที่มากขึ้น เนื่องจากหากโค้ดเรียกใช้ทรัพยากรที่ไม่ใช่การจําลอง (เวอร์ชันที่ใช้งานจริง) โดยไม่ได้ตั้งใจ จะไม่มีการเปลี่ยนแปลงข้อมูล การใช้งาน และการเรียกเก็บเงิน
- รองรับการทำงานแบบออฟไลน์ได้ดียิ่งขึ้น เนื่องจากไม่จําเป็นต้องเข้าถึงอินเทอร์เน็ตเพื่อดาวน์โหลดการกําหนดค่า SDK
เครื่องมือวัดผลแอปเพื่อพูดคุยกับโปรแกรมจำลอง
เมื่อเริ่มต้นระบบ โปรแกรมจำลอง Cloud Firestore จะสร้างฐานข้อมูลเริ่มต้นและฐานข้อมูลที่ชื่อสำหรับการกำหนดค่า firestore
แต่ละรายการในไฟล์ firebase.json
ระบบจะสร้างฐานข้อมูลที่ชื่อโดยนัยเพื่อตอบสนองต่อการเรียก SDK หรือ REST API ใดๆ ไปยังโปรแกรมจำลองที่อ้างอิงฐานข้อมูลหนึ่งๆ ด้วย ฐานข้อมูลที่สร้างขึ้นโดยนัยดังกล่าวจะทํางานด้วยกฎแบบเปิด
หากต้องการทํางานกับฐานข้อมูลที่ชื่อและฐานข้อมูลเริ่มต้นแบบอินเทอร์แอกทีฟใน Emulator Suite UI ให้อัปเดต URL ในแถบที่อยู่ของเบราว์เซอร์เพื่อเลือกฐานข้อมูลที่ชื่อหรือฐานข้อมูลเริ่มต้น
- เช่น หากต้องการเรียกดูข้อมูลในอินสแตนซ์เริ่มต้น ให้อัปเดต URL เป็น
localhost:4000/firestore/default/data
- หากต้องการเรียกดูในอินสแตนซ์ชื่อ
ecommerce
ให้อัปเดตเป็นlocalhost:4000/firestore/ecommerce/data
แพลตฟอร์ม Android, Apple และ Web SDK
ตั้งค่าการกําหนดค่าในแอปหรือชั้นเรียนทดสอบเพื่อโต้ตอบกับ Cloud Firestore ดังนี้ โปรดทราบว่าในตัวอย่างต่อไปนี้ โค้ดแอปจะเชื่อมต่อกับฐานข้อมูลโปรเจ็กต์เริ่มต้น ดูตัวอย่างที่เกี่ยวข้องกับ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);
Swift
let settings = Firestore.firestore().settings settings.host = "127.0.0.1:8080" settings.cacheSettings = MemoryCacheSettings() settings.isSSLEnabled = false Firestore.firestore().settings = settings
Web
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore"; // firebaseApps previously initialized using initializeApp() const db = getFirestore(); connectFirestoreEmulator(db, '127.0.0.1', 8080);
Web
// Firebase previously initialized using firebase.initializeApp(). var db = firebase.firestore(); if (location.hostname === "localhost") { db.useEmulator("127.0.0.1", 8080); }
คุณไม่จำเป็นต้องตั้งค่าเพิ่มเติมเพื่อทดสอบ Cloud Functions ที่ทริกเกอร์โดยเหตุการณ์ Firestore โดยใช้โปรแกรมจำลอง เมื่อโปรแกรมจำลอง Firestore และ Cloud Functions ทำงานอยู่ด้วยกัน โปรแกรมจำลองจะทำงานร่วมกันโดยอัตโนมัติ
Admin SDK วินาที
Firebase Admin SDK จะเชื่อมต่อกับCloud Firestore Emulatorโดยอัตโนมัติเมื่อตั้งค่าตัวแปรสภาพแวดล้อม FIRESTORE_EMULATOR_HOST
ดังนี้
export FIRESTORE_EMULATOR_HOST="127.0.0.1:8080"
หากโค้ดของคุณทํางานภายในโปรแกรมจําลอง Cloud Functions ระบบจะตั้งค่ารหัสโปรเจ็กต์และการกําหนดค่าอื่นๆ โดยอัตโนมัติเมื่อเรียกใช้ initializeApp
หากต้องการให้รหัส Admin SDK เชื่อมต่อกับโปรแกรมจำลองที่ใช้ร่วมกันซึ่งทำงานในสภาพแวดล้อมอื่น คุณต้องระบุรหัสโปรเจ็กต์เดียวกับที่คุณตั้งค่าโดยใช้ Firebase CLI
คุณสามารถส่งรหัสโปรเจ็กต์ไปยัง initializeApp
โดยตรงหรือตั้งค่าตัวแปรสภาพแวดล้อม GCLOUD_PROJECT
ก็ได้
Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
ตัวแปรสภาพแวดล้อม
export GCLOUD_PROJECT="your-project-id"
ล้างฐานข้อมูลระหว่างการทดสอบ
Firestore เวอร์ชันที่ใช้งานจริงไม่มีเมธอด SDK ของแพลตฟอร์มสำหรับการล้างข้อมูลฐานข้อมูล แต่โปรแกรมจำลอง Firestore มีปลายทาง REST สำหรับวัตถุประสงค์นี้โดยเฉพาะ ซึ่งเรียกได้จากขั้นตอนการตั้งค่า/การปิดใช้งานเฟรมเวิร์กการทดสอบ จากคลาสทดสอบ หรือจากเชลล์ (เช่น ด้วย curl
) ก่อนเริ่มการทดสอบ คุณสามารถใช้แนวทางนี้แทนการปิดกระบวนการจำลองได้
ดำเนินการ DELETE ผ่าน HTTP ด้วยเมธอดที่เหมาะสม โดยระบุรหัสโปรเจ็กต์ Firebase เช่น 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 for Firebase ช่วยให้คุณส่งออกข้อมูลจากอินสแตนซ์โปรแกรมจำลองที่ทำงานอยู่ได้ กําหนดชุดข้อมูลพื้นฐานที่จะใช้ในเทสหน่วยหรือเวิร์กโฟลว์การผสานรวมอย่างต่อเนื่อง จากนั้นส่งออกเพื่อแชร์กับทีม
firebase emulators:export ./dir
ในการทดสอบ ให้นําเข้าข้อมูลพื้นฐานเมื่อเปิดใช้งานโปรแกรมจําลอง
firebase emulators:start --import=./dir
คุณสามารถสั่งให้โปรแกรมจำลองส่งออกข้อมูลเมื่อปิดเครื่องได้ โดยระบุเส้นทางการส่งออกหรือใช้เส้นทางที่ส่งไปยัง Flag --import
ก็ได้
firebase emulators:start --import=./dir --export-on-exit
ตัวเลือกการนําเข้าและส่งออกข้อมูลเหล่านี้ใช้ได้กับคําสั่ง firebase emulators:exec
ด้วย ดูข้อมูลเพิ่มเติมได้ที่การอ้างอิงคำสั่งของโปรแกรมจำลอง
แสดงภาพกิจกรรมของกฎความปลอดภัย
ขณะทํางานกับต้นแบบและทดสอบลูป คุณสามารถใช้เครื่องมือแสดงภาพและรายงานที่ Local Emulator Suite มีให้
ใช้เครื่องมือตรวจสอบคำขอ
โปรแกรมจำลอง Cloud Firestore ช่วยให้คุณเห็นภาพคําขอไคลเอ็นต์ใน Emulator Suite UI รวมถึงการติดตามการประเมินสําหรับ Firebase Security Rules
เปิดแท็บ 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 FirestoreEmulator จะพยายามจำลองลักษณะการทํางานของบริการเวอร์ชันที่ใช้งานจริงอย่างตรงไปตรงมา โดยมีข้อจํากัดบางอย่างที่ควรทราบ
การรองรับฐานข้อมูลหลายรายการสําหรับ Cloud Firestore
ปัจจุบัน Emulator Suite UI รองรับการสร้าง การแก้ไข การลบ การตรวจสอบคำขอ และการแสดงภาพความปลอดภัยแบบอินเทอร์แอกทีฟสำหรับฐานข้อมูลเริ่มต้น แต่ไม่รองรับฐานข้อมูลที่ตั้งชื่อเพิ่มเติม
อย่างไรก็ตาม โปรแกรมจำลองจะสร้างฐานข้อมูลที่ชื่อตามการกำหนดค่าในไฟล์ firebase.json
และตอบสนองต่อการเรียกใช้ SDK หรือ REST API โดยนัย
ธุรกรรม
ปัจจุบันโปรแกรมจําลองยังไม่ได้ใช้ลักษณะการทํางานของธุรกรรมทั้งหมดที่พบในเวอร์ชันที่ใช้งานจริง เมื่อทดสอบฟีเจอร์ที่มีการเขียนพร้อมกันหลายรายการในเอกสารเดียว โปรแกรมจำลองอาจดำเนินการตามคำขอเขียนช้า ในบางกรณี ล็อกอาจใช้เวลาถึง 30 วินาทีในการปลดล็อก ลองปรับระยะหมดเวลาการทดสอบตามความเหมาะสม หากจำเป็น
ดัชนี
โปรแกรมจำลองจะไม่ติดตามดัชนีผสม แต่จะดำเนินการค้นหาที่ถูกต้องแทน อย่าลืมทดสอบแอปกับCloud Firestoreตัวอย่างจริงเพื่อดูว่าต้องใช้ดัชนีใด
จำกัดสูงสุด
โปรแกรมจำลองไม่ได้บังคับใช้ขีดจำกัดทั้งหมดที่ใช้ในเวอร์ชันที่ใช้งานจริง เช่น เครื่องจำลองอาจอนุญาตให้ทำธุรกรรมที่บริการเวอร์ชันที่ใช้งานจริงจะปฏิเสธเนื่องจากมีมูลค่าสูงเกินไป โปรดตรวจสอบว่าคุณคุ้นเคยกับขีดจำกัดที่ระบุไว้และออกแบบแอปเพื่อหลีกเลี่ยงขีดจำกัดเหล่านั้น
ฉันควรทำอย่างไรต่อไป
- ดูชุดวิดีโอที่ดูแลและตัวอย่างวิธีใช้อย่างละเอียดได้ในเพลย์ลิสต์การฝึกของ Firebase Emulators
- ตรวจสอบกรณีการใช้งานขั้นสูงที่เกี่ยวข้องกับการทดสอบกฎการรักษาความปลอดภัยและ Firebase Test SDK: ทดสอบกฎการรักษาความปลอดภัย (Firestore)
- เนื่องจากฟังก์ชันที่ทริกเกอร์เป็นการผสานรวมทั่วไปกับ Cloud Firestore ดูข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรมจำลอง Cloud Functions for Firebase ได้ที่หัวข้อเรียกใช้ฟังก์ชันในเครื่อง