ก่อนเชื่อมต่อแอปกับโปรแกรมจำลอง Realtime Database โปรดตรวจสอบว่า คุณ เข้าใจเวิร์กโฟลว์ 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 จริง และ ไม่มีทรัพยากรที่ใช้งานจริง โดยปกติแล้ว คุณจะเข้าถึงโปรเจ็กต์เหล่านี้ผ่าน Codelab หรือ บทแนะนำอื่นๆ รหัสโปรเจ็กต์สำหรับโปรเจ็กต์สาธิตจะมีคำนำหน้า |
เมื่อทำงานกับโปรเจ็กต์ Firebase สาธิต แอปและโค้ดจะโต้ตอบกับ โปรแกรมจำลอง เท่านั้น หากแอปพยายามโต้ตอบกับทรัพยากร ที่ไม่มีโปรแกรมจำลองทำงานอยู่ โค้ดนั้นจะทำงานไม่สำเร็จ |
เราขอแนะนำให้คุณใช้โปรเจ็กต์สาธิตทุกครั้งที่ทำได้ สิทธิประโยชน์มีดังนี้
- ตั้งค่าได้ง่ายขึ้น เนื่องจากคุณสามารถเรียกใช้โปรแกรมจำลองได้โดยไม่ต้องสร้างโปรเจ็กต์ Firebase
- ปลอดภัยมากขึ้น เนื่องจากหากโค้ดเรียกใช้ทรัพยากรที่ไม่ได้จำลอง (การใช้งานจริง) โดยไม่ได้ตั้งใจ ก็จะไม่มีโอกาสที่ข้อมูลจะเปลี่ยนแปลง การใช้งาน และการเรียกเก็บเงิน
- รองรับการใช้งานแบบออฟไลน์ได้ดีขึ้น เนื่องจากไม่จำเป็นต้องเข้าถึงอินเทอร์เน็ตเพื่อดาวน์โหลดการกำหนดค่า SDK
กำหนดค่าแอปให้สื่อสารกับโปรแกรมจำลอง
SDK ของแพลตฟอร์ม Android, Apple และเว็บ
ตั้งค่าการกำหนดค่าในแอปหรือคลาสทดสอบให้โต้ตอบกับ Realtime Database ดังนี้
Kotlin
// 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 โดยใช้โปรแกรมจำลอง เมื่อโปรแกรมจำลอง Realtime Database และ Cloud Functions ทำงานอยู่พร้อมกัน โปรแกรมจำลองทั้ง 2 จะทำงานร่วมกันโดยอัตโนมัติ
Admin SDK
Firebase Admin SDKs จะเชื่อมต่อกับโปรแกรมจำลอง 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
Admin SDK ของ Node.js
admin.initializeApp({ projectId: "your-project-id" });
ตัวแปรสภาพแวดล้อม
export GCLOUD_PROJECT="your-project-id"
ล้างฐานข้อมูลระหว่างการทดสอบ
หากต้องการล้างข้อมูล Realtime Database ระหว่างกิจกรรม คุณสามารถล้างข้อมูลอ้างอิงฐานข้อมูลได้ คุณสามารถใช้วิธีนี้แทนการปิดกระบวนการโปรแกรมจำลอง
Kotlin
// 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 ช่วยให้คุณส่งออกข้อมูล จากอินสแตนซ์โปรแกรมจำลองที่ทำงานอยู่ได้ กำหนดชุดข้อมูลพื้นฐานที่จะใช้ในการทำ Unit Test หรือเวิร์กโฟลว์การรวมอย่างต่อเนื่อง แล้วส่งออกข้อมูลดังกล่าวเพื่อแชร์กับทีม
firebase emulators:export ./dirในการทดสอบ ให้นำเข้าข้อมูลพื้นฐานเมื่อเริ่มโปรแกรมจำลอง
firebase emulators:start --import=./dirคุณสามารถสั่งให้โปรแกรมจำลองส่งออกข้อมูลเมื่อปิด โดยระบุเส้นทางการส่งออกหรือใช้เส้นทางที่ส่งไปยังแฟล็ก --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
- ตรวจสอบกรณีการใช้งานขั้นสูงที่เกี่ยวข้องกับการทดสอบกฎความปลอดภัยและ Firebase Test SDK: ทดสอบกฎความปลอดภัย (Realtime Database)
- เนื่องจากฟังก์ชันที่ทริกเกอร์เป็นการผสานรวมทั่วไปกับ Realtime Database โปรดดู ข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรมจำลอง Cloud Functions for Firebase ได้ที่ เรียกใช้ฟังก์ชันในเครื่อง