Firebase CLI มีตัวจำลอง Cloud Functions ซึ่งสามารถจำลองประเภทฟังก์ชันต่อไปนี้:
- ฟังก์ชัน HTTPS
- ฟังก์ชันที่เรียกได้
- ฟังก์ชันพื้นหลังที่เรียกใช้จาก Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage และ Cloud Pub/Sub
คุณสามารถเรียกใช้ฟังก์ชันในเครื่องเพื่อทดสอบก่อนที่จะนำไปใช้งานจริง
ติดตั้ง Firebase CLI
หากต้องการใช้โปรแกรมจำลอง Cloud Functions ให้ติดตั้ง Firebase CLI ก่อน:
npm install -g firebase-tools
ในการใช้โปรแกรมจำลองในเครื่อง ฟังก์ชันคลาวด์ของคุณต้องขึ้นอยู่กับ:
-
firebase-admin
เวอร์ชัน8.0.0
หรือสูงกว่า -
firebase-functions
เวอร์ชัน3.0.0
หรือสูงกว่า
ตั้งค่าข้อมูลประจำตัวของผู้ดูแลระบบ (ไม่บังคับ)
หากต้องการให้การทดสอบฟังก์ชันโต้ตอบกับ Google API หรือ Firebase API อื่นๆ ผ่าน Firebase Admin SDK คุณอาจต้องตั้งค่าข้อมูลประจำตัวของผู้ดูแลระบบ
- ทริกเกอร์ Cloud Firestore และฐานข้อมูลเรียลไทม์มีข้อมูลรับรองเพียงพออยู่แล้ว และ ไม่ ต้องตั้งค่าเพิ่มเติม
- API อื่นๆ ทั้งหมด รวมถึง Firebase API เช่น Authentication และ FCM หรือ Google API เช่น Cloud Translation หรือ Cloud Speech จำเป็นต้องมีขั้นตอนการตั้งค่าที่อธิบายไว้ในส่วนนี้ สิ่งนี้มีผลไม่ว่าคุณจะใช้ Cloud Functions shell หรือ
firebase emulators:start
ในการตั้งค่าข้อมูลประจำตัวของผู้ดูแลระบบสำหรับฟังก์ชันที่เลียนแบบ:
- เปิด บานหน้าต่างบัญชีบริการ ของ Google Cloud Console
- ตรวจสอบให้แน่ใจว่าได้เลือก บัญชีบริการเริ่มต้นของ App Engine แล้ว และใช้เมนูตัวเลือกทางด้านขวาเพื่อเลือก สร้างรหัส
- เมื่อได้รับแจ้ง ให้เลือก JSON สำหรับประเภทคีย์ แล้วคลิก สร้าง
ตั้งค่าข้อมูลรับรองเริ่มต้นของ Google ให้ชี้ไปที่คีย์ที่ดาวน์โหลด:
ยูนิกซ์
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase emulators:start
หน้าต่าง
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase emulators:start
หลังจากทำตามขั้นตอนเหล่านี้แล้ว การทดสอบฟังก์ชันของคุณจะเข้าถึง Firebase และ Google API ได้โดยใช้ Admin SDK ตัวอย่างเช่น เมื่อทดสอบทริกเกอร์การตรวจสอบสิทธิ์ ฟังก์ชันจำลองสามารถเรียกใช้ admin.auth().getUserByEmail(email)
ตั้งค่าการกำหนดค่าฟังก์ชัน (ไม่บังคับ)
หากคุณกำลังใช้ตัวแปรการกำหนดค่าฟังก์ชันแบบกำหนดเอง ให้รันคำสั่งก่อนเพื่อรับการกำหนดค่าแบบกำหนดเองของคุณ (เรียกใช้คำสั่งนี้ภายในไดเร็กทอรี functions
) ในสภาพแวดล้อมแบบโลคัลของคุณ:
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
เรียกใช้ชุดโปรแกรมจำลอง
ในการรันโปรแกรมจำลอง Cloud Functions ให้ใช้คำสั่ง emulators:start
:
firebase emulators:start
คำสั่ง emulators:start
จะเริ่มต้นโปรแกรมจำลองสำหรับ Cloud Functions, Cloud Firestore, Realtime Database และ Firebase Hosting ตามผลิตภัณฑ์ที่คุณเริ่มต้นในโครงการในเครื่องของคุณโดยใช้ firebase init
หากคุณต้องการเริ่มโปรแกรมจำลองเฉพาะ ให้ใช้แฟล็ก --only
:
firebase emulators:start --only functions
หากคุณต้องการรันชุดทดสอบหรือสคริปต์ทดสอบหลังจากที่อีมูเลเตอร์เริ่มทำงาน ให้ใช้คำสั่ง emulators:exec
:
firebase emulators:exec "./my-test.sh"
เครื่องมือให้แอปของคุณพูดคุยกับผู้เลียนแบบ
หากต้องการให้แอปโต้ตอบกับโปรแกรมจำลอง คุณอาจต้องทำการกำหนดค่าเพิ่มเติม
เครื่องมือสำหรับแอปของคุณสำหรับฟังก์ชันที่เรียกได้
หากต้นแบบและกิจกรรมการทดสอบของคุณเกี่ยวข้องกับ ฟังก์ชันแบ็กเอนด์ที่เรียกได้ ให้ กำหนดค่าการโต้ตอบกับโปรแกรมจำลอง Cloud Functions for Firebase ดังนี้:
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 functions = Firebase.functions functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFunctions functions = FirebaseFunctions.getInstance(); functions.useEmulator("10.0.2.2", 5001);
สวิฟต์
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")
Web modular API
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "127.0.0.1", 5001);
Web namespaced API
firebase.functions().useEmulator("127.0.0.1", 5001);
เครื่องมือสำหรับแอปของคุณสำหรับการจำลองฟังก์ชัน HTTPS
แต่ละฟังก์ชัน HTTPS ในโค้ดของคุณจะให้บริการจากโปรแกรมจำลองในเครื่องโดยใช้รูปแบบ URL ต่อไปนี้:
http:// $HOST : $PORT / $PROJECT / $REGION / $NAME
ตัวอย่างเช่น ฟังก์ชัน helloWorld
อย่างง่ายที่มีพอร์ตโฮสต์และภูมิภาคเริ่มต้นจะให้บริการที่:
https://localhost:5001/ $PROJECT /us-central1/helloWorld
ปรับแต่งแอปของคุณสำหรับการจำลองฟังก์ชันที่ทริกเกอร์พื้นหลัง
โปรแกรมจำลอง Cloud Functions รองรับฟังก์ชันที่ทริกเกอร์พื้นหลังจากแหล่งที่มาต่อไปนี้:
- โปรแกรมจำลองฐานข้อมูลเรียลไทม์
- โปรแกรมจำลอง Cloud Firestore
- โปรแกรมจำลองการตรวจสอบสิทธิ์
- โปรแกรมจำลอง Pub/Sub
หากต้องการทริกเกอร์เหตุการณ์เบื้องหลัง ให้แก้ไขทรัพยากรส่วนหลังโดยใช้ Emulator Suite UI หรือเชื่อมต่อแอปหรือโค้ดทดสอบกับโปรแกรมจำลองโดยใช้ SDK สำหรับแพลตฟอร์มของคุณ
ตัวจัดการการทดสอบสำหรับเหตุการณ์ที่กำหนดเองที่ส่งโดยส่วนขยาย
สำหรับฟังก์ชันที่คุณใช้เพื่อจัดการกับเหตุการณ์ที่กำหนดเองของ Firebase Extensions ด้วย Cloud Functions v2 ตัวจำลอง Cloud Functions จะจับคู่กับตัวจำลอง Eventarc เพื่อรองรับ ทริกเกอร์ Eventarc
ในการทดสอบตัวจัดการเหตุการณ์แบบกำหนดเองสำหรับส่วนขยายที่ปล่อยเหตุการณ์ คุณต้องติดตั้ง Cloud Functions และตัวจำลอง Eventarc
รันไทม์ของ Cloud Functions ตั้งค่าตัวแปรสภาพแวดล้อม EVENTARC_EMULATOR
เป็น localhost:9299
ในกระบวนการปัจจุบันหากตัวจำลอง Eventarc กำลังทำงานอยู่ Firebase Admin SDK จะเชื่อมต่อกับโปรแกรมจำลอง Eventarc โดยอัตโนมัติเมื่อตั้งค่าตัวแปรสภาพแวดล้อม EVENTARC_EMULATOR
คุณสามารถแก้ไขพอร์ตเริ่มต้นตามที่อธิบายไว้ใน Configure Local Emulator Suite
เมื่อกำหนดค่าตัวแปรสภาพแวดล้อมอย่างถูกต้อง Firebase Admin SDK จะส่งเหตุการณ์ไปยังโปรแกรมจำลอง Eventarc โดยอัตโนมัติ ในทางกลับกัน อีมูเลเตอร์ Eventarc จะโทรกลับไปยังโปรแกรมจำลอง Cloud Functions เพื่อทริกเกอร์ตัวจัดการที่ลงทะเบียนไว้
คุณสามารถตรวจสอบบันทึกของฟังก์ชันใน Emulator Suite UI เพื่อดูรายละเอียดเกี่ยวกับการดำเนินการของตัวจัดการ
การโต้ตอบกับบริการอื่น ๆ
ชุดอีมูเลเตอร์ประกอบด้วยอีมูเลเตอร์หลายตัว ซึ่งเปิดใช้งานการทดสอบการโต้ตอบข้ามผลิตภัณฑ์
Cloud Firestore
หากคุณมีฟังก์ชันที่ใช้ Firebase Admin SDK เพื่อเขียนไปยัง Cloud Firestore การเขียนเหล่านี้จะถูกส่งไปยังโปรแกรมจำลอง Cloud Firestore หากกำลังทำงานอยู่ หากมีการทริกเกอร์ฟังก์ชันเพิ่มเติมโดยการเขียนเหล่านั้น ฟังก์ชันเหล่านั้นจะถูกเรียกใช้ในโปรแกรมจำลอง Cloud Functions
การจัดเก็บเมฆ
หากคุณมีฟังก์ชันที่ใช้ Firebase Admin SDK (เวอร์ชัน 9.7.0 ขึ้นไป) เพื่อเขียนไปยัง Cloud Storage การเขียนเหล่านี้จะถูกส่งไปยัง Cloud Storage emulator หากกำลังทำงานอยู่ หากมีการทริกเกอร์ฟังก์ชันเพิ่มเติมโดยการเขียนเหล่านั้น ฟังก์ชันเหล่านั้นจะถูกเรียกใช้ในโปรแกรมจำลอง Cloud Functions
การรับรองความถูกต้องของ Firebase
หากคุณมีฟังก์ชันที่ใช้ Firebase Admin SDK (เวอร์ชัน 9.3.0 ขึ้นไป) เพื่อเขียนไปยัง Firebase Authentication การเขียนเหล่านี้จะถูกส่งไปยัง Auth emulator หากกำลังทำงานอยู่ หากมีการทริกเกอร์ฟังก์ชันเพิ่มเติมโดยการเขียนเหล่านั้น ฟังก์ชันเหล่านั้นจะถูกเรียกใช้ในโปรแกรมจำลอง Cloud Functions
โฮสติ้ง Firebase
หากคุณใช้ Cloud Functions เพื่อ สร้างเนื้อหาแบบไดนามิกสำหรับ Firebase Hosting firebase emulators:start
จะใช้ฟังก์ชัน HTTP ในเครื่องของคุณเป็นพร็อกซีสำหรับการโฮสต์
การบันทึก
โปรแกรมจำลองสตรีมบันทึกจากฟังก์ชันของคุณไปยังหน้าต่างเทอร์มินัลที่รัน มันแสดงผลทั้งหมดจาก console.log()
, console.info()
, console.error()
และ console.warn()
ภายในฟังก์ชั่นของคุณ
ขั้นตอนถัดไป
สำหรับตัวอย่างแบบเต็มของการใช้ชุดโปรแกรมจำลอง Firebase โปรดดู ตัวอย่างการทดสอบการเริ่มต้นอย่างรวดเร็ว