ก่อนเชื่อมต่อแอปของคุณกับโปรแกรมจำลองฐานข้อมูลเรียลไทม์ ตรวจสอบให้แน่ใจว่าคุณ เข้าใจเวิร์กโฟลว์ 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
ตั้งค่าการกำหนดค่าในแอปหรือคลาสทดสอบเพื่อโต้ตอบกับฐานข้อมูลเรียลไทม์ดังนี้
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 database = Firebase.database database.useEmulator("10.0.2.2", 9000)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseDatabase database = FirebaseDatabase.getInstance(); database.useEmulator("10.0.2.2", 9000);
สวิฟต์
// In almost all cases the ns (namespace) is your project ID. let db = Database.database(url:"http://localhost:9000?ns=YOUR_DATABASE_NAMESPACE")
Web modular API
import { getDatabase, connectDatabaseEmulator } from "firebase/database"; const db = getDatabase(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. connectDatabaseEmulator(db, "localhost", 9000); }
Web namespaced API
var db = firebase.database(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. db.useEmulator("localhost", 9000); }
ไม่จำเป็นต้องตั้งค่าเพิ่มเติมเพื่อทดสอบ Cloud Functions ที่ทริกเกอร์โดยเหตุการณ์ฐานข้อมูลเรียลไทม์ โดยใช้โปรแกรมจำลอง เมื่อทั้ง Realtime Database และ Cloud Functions emulators กำลังทำงาน ทั้งคู่จะทำงานร่วมกันโดยอัตโนมัติ
Admin SDK
Firebase Admin SDK จะเชื่อมต่อกับโปรแกรมจำลองฐานข้อมูลเรียลไทม์โดยอัตโนมัติเมื่อตั้งค่าตัวแปรสภาพแวดล้อม FIREBASE_DATABASE_EMULATOR_HOST
:
export FIREBASE_DATABASE_EMULATOR_HOST="localhost:9000"
หากรหัสของคุณทำงานภายในโปรแกรมจำลอง 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"
ล้างฐานข้อมูลของคุณระหว่างการทดสอบ
หากต้องการล้างฐานข้อมูลเรียลไทม์ระหว่างกิจกรรม คุณสามารถล้างข้อมูลอ้างอิงฐานข้อมูลได้ คุณสามารถใช้วิธีนี้เป็นทางเลือกแทนการปิดกระบวนการอีมูเลเตอร์
Kotlin+KTX
// With a DatabaseReference, write null to clear the database. database.reference.setValue(null)
Java
// With a DatabaseReference, write null to clear the database. database.getReference().setValue(null);
สวิฟต์
// With a DatabaseReference, write nil to clear the database. Database.database().reference().setValue(nil);
Web modular API
import { getDatabase, ref, set } from "firebase/database"; // With a database Reference, write null to clear the database. const db = getDatabase(); set(ref(db), null);
Web namespaced API
// With a database Reference, write null to clear the database. firebase.database().ref().set(null);
โดยปกติแล้ว โค้ดของคุณควรรอการยืนยันว่าการล้างเสร็จสิ้นหรือล้มเหลวโดยใช้คุณสมบัติการจัดการเหตุการณ์แบบอะซิงโครนัสของแพลตฟอร์มของคุณ
เมื่อดำเนินการตามขั้นตอนเช่นนี้แล้ว คุณสามารถจัดลำดับการทดสอบและทริกเกอร์ฟังก์ชันของคุณด้วยความมั่นใจว่าข้อมูลเก่าจะถูกลบออกระหว่างการรัน และคุณกำลังใช้การกำหนดค่าการทดสอบพื้นฐานใหม่
นำเข้าและส่งออกข้อมูล
ตัวจำลองฐานข้อมูลและ 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
เห็นภาพการประเมินกฎ
เมื่อคุณเพิ่ม Security Rules ให้กับต้นแบบของคุณ คุณสามารถดีบักได้ด้วยเครื่องมือ Local Emulator Suite
หลังจากเรียกใช้ชุดการทดสอบ คุณสามารถเข้าถึงรายงานความครอบคลุมการทดสอบที่แสดงการประเมินกฎแต่ละข้อของคุณ หากต้องการรับรายงาน ให้สอบถามจุดสิ้นสุดที่เปิดเผยบนโปรแกรมจำลองในขณะที่กำลังทำงาน สำหรับเวอร์ชันที่เหมาะกับเบราว์เซอร์ ให้ใช้ URL ต่อไปนี้:
http://localhost:9000/.inspect/coverage?ns=<database_name>
ซึ่งจะแบ่งกฎของคุณออกเป็นนิพจน์และนิพจน์ย่อยที่คุณสามารถวางเมาส์เหนือเพื่อดูข้อมูลเพิ่มเติม รวมถึงจำนวนการดำเนินการและค่าที่ส่งคืน สำหรับข้อมูล JSON เวอร์ชันดิบ ให้ใส่ URL ต่อไปนี้ในข้อความค้นหาของคุณ:
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
อะไรต่อไป?
- สำหรับชุดวิดีโอที่คัดสรรมาอย่างดีและตัวอย่างวิธีใช้โดยละเอียด โปรดติดตาม เพลย์ลิสต์การฝึกอบรม Firebase Emulators
- ตรวจสอบกรณีการใช้งานขั้นสูงที่เกี่ยวข้องกับการทดสอบกฎความปลอดภัยและ Firebase Test SDK: ทดสอบกฎความปลอดภัย (ฐานข้อมูลเรียลไทม์)
- เนื่องจากฟังก์ชันที่ทริกเกอร์เป็นการผสานรวมโดยทั่วไปกับฐานข้อมูลเรียลไทม์ เรียนรู้เพิ่มเติมเกี่ยวกับโปรแกรมจำลอง Cloud Functions for Firebase ได้ที่ เรียกใช้ฟังก์ชันในเครื่อง