ก่อนเชื่อมต่อแอปกับโปรแกรมจำลอง Realtime Database ให้ตรวจสอบว่าคุณเข้าใจเวิร์กโฟลว์โดยรวมของ 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
เครื่องมือวัดผลแอปเพื่อพูดคุยกับโปรแกรมจำลอง
แพลตฟอร์ม Android, Apple และ Web SDK
ตั้งค่าการกําหนดค่าในแอปหรือคลาสทดสอบเพื่อโต้ตอบกับ Realtime Database ดังนี้
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);
Swift
// In almost all cases the ns (namespace) is your project ID. let db = Database.database(url:"http://127.0.0.1:9000?ns=YOUR_DATABASE_NAMESPACE")
Web
import { getDatabase, connectDatabaseEmulator } from "firebase/database"; const db = getDatabase(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. connectDatabaseEmulator(db, "127.0.0.1", 9000); }
Web
var db = firebase.database(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. db.useEmulator("127.0.0.1", 9000); }
คุณไม่จำเป็นต้องตั้งค่าเพิ่มเติมเพื่อทดสอบ Cloud Functions ที่ทริกเกอร์โดยเหตุการณ์ใน Realtime Database โดยใช้โปรแกรมจำลอง เมื่อทั้งโปรแกรมจำลองฐานข้อมูลเรียลไทม์และ Cloud Functions ทำงานอยู่ โปรแกรมจำลองจะทำงานร่วมกันโดยอัตโนมัติ
Admin SDK วินาที
Firebase Admin SDK จะเชื่อมต่อกับโปรแกรมจำลอง Realtime Database โดยอัตโนมัติเมื่อตั้งค่าตัวแปรสภาพแวดล้อม FIREBASE_DATABASE_EMULATOR_HOST
ดังนี้
export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"
หากโค้ดของคุณทำงานภายในโปรแกรมจำลอง 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"
ล้างฐานข้อมูลระหว่างการทดสอบ
หากต้องการล้าง Realtime Database ระหว่างกิจกรรม ให้ล้างการอ้างอิงฐานข้อมูล คุณใช้แนวทางนี้แทนการปิดกระบวนการจำลองได้
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);
Swift
// With a DatabaseReference, write nil to clear the database. Database.database().reference().setValue(nil);
Web
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
// With a database Reference, write null to clear the database. firebase.database().ref().set(null);
แน่นอนว่าโค้ดของคุณควรรอการยืนยันว่าการล้างข้อมูลเสร็จสมบูรณ์หรือไม่โดยใช้ฟีเจอร์การจัดการเหตุการณ์แบบแอซิงโครนัสของแพลตฟอร์ม
เมื่อใช้ขั้นตอนเช่นนี้ คุณจะจัดลําดับการทดสอบและทริกเกอร์ฟังก์ชันได้อย่างมั่นใจว่าระบบจะล้างข้อมูลเก่าระหว่างการเรียกใช้ และคุณกําลังใช้การกําหนดค่าการทดสอบพื้นฐานใหม่
นำเข้าและส่งออกข้อมูล
โปรแกรมจำลองฐานข้อมูลและ 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 มีให้
แสดงภาพการประเมินกฎ
เมื่อเพิ่มกฎความปลอดภัยลงในโปรโตไทป์ คุณสามารถแก้ไขข้อบกพร่องด้วยเครื่องมือ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
- ตรวจสอบ Use Case ขั้นสูงที่เกี่ยวข้องกับการทดสอบกฎการรักษาความปลอดภัยและ Firebase Test SDK: ทดสอบกฎการรักษาความปลอดภัย (Realtime Database)
- เนื่องจากฟังก์ชันที่ทริกเกอร์เป็นการผสานรวมทั่วไปกับ Realtime Database โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรมจำลอง Cloud Functions for Firebase ที่หัวข้อเรียกใช้ฟังก์ชันในเครื่อง