ก่อนเชื่อมต่อแอปกับ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 จริง คุณจะเรียกใช้โปรแกรมจำลองสำหรับผลิตภัณฑ์ที่รองรับทั้งหมดหรือบางส่วนได้ สำหรับผลิตภัณฑ์ที่คุณไม่ได้จำลอง แอปและโค้ดจะ โต้ตอบกับทรัพยากรที่ใช้งานจริง (อินสแตนซ์ฐานข้อมูล, Bucket ที่เก็บข้อมูล ฟังก์ชัน ฯลฯ) |
| เดโม |
โปรเจ็กต์ Firebase สาธิตไม่มีการกำหนดค่า Firebase จริงและไม่มีทรัพยากรที่ใช้งานจริง โดยปกติแล้วจะเข้าถึงโปรเจ็กต์เหล่านี้ผ่าน Codelab หรือบทแนะนำอื่นๆ รหัสโปรเจ็กต์สำหรับโปรเจ็กต์เดโมจะมีคำนำหน้า |
เมื่อทำงานกับโปรเจ็กต์ Firebase สาธิต แอปและโค้ดของคุณจะโต้ตอบกับ โปรแกรมจำลองเท่านั้น หากแอปพยายามโต้ตอบกับทรัพยากร ที่ไม่มีการเรียกใช้โปรแกรมจำลอง โค้ดดังกล่าวจะทำงานไม่สำเร็จ |
เราขอแนะนำให้คุณใช้โปรเจ็กต์เดโมทุกครั้งที่ทำได้ สิทธิประโยชน์มีดังนี้
- ตั้งค่าได้ง่ายขึ้น เนื่องจากคุณเรียกใช้โปรแกรมจำลองได้โดยไม่ต้องสร้างโปรเจ็กต์ Firebase
- ปลอดภัยยิ่งขึ้น เนื่องจากหากโค้ดเรียกใช้ทรัพยากรที่ไม่ใช่การจำลอง (การผลิต) โดยไม่ได้ตั้งใจ ก็จะไม่มีโอกาสที่ข้อมูลจะเปลี่ยนแปลง การใช้งาน และการเรียกเก็บเงิน
- รองรับการใช้งานแบบออฟไลน์ได้ดียิ่งขึ้น เนื่องจากไม่จำเป็นต้องเข้าถึงอินเทอร์เน็ตเพื่อ ดาวน์โหลดการกำหนดค่า SDK
วัดคุมแอปเพื่อสื่อสารกับโปรแกรมจำลอง
Android, แพลตฟอร์ม Apple และ SDK เว็บ
ตั้งค่าในแอปหรือคลาสทดสอบเพื่อโต้ตอบกับ 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 ทำงานอยู่ ทั้งคู่ โปรแกรมจะทำงานร่วมกันโดยอัตโนมัติ
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 ได้
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โปรแกรมจำลองช่วยให้คุณส่งออกข้อมูล จากอินสแตนซ์โปรแกรมจำลองที่กำลังทำงานได้ กำหนดชุดข้อมูลพื้นฐานที่จะใช้ในการทดสอบหน่วยหรือเวิร์กโฟลว์การรวมอย่างต่อเนื่อง จากนั้นส่งออกเพื่อแชร์ในทีม
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 ที่เรียกใช้ฟังก์ชันในเครื่อง