Firebase CLI มีโปรแกรมจำลอง Cloud Functions ซึ่งสามารถจำลองประเภทฟังก์ชันต่อไปนี้ได้:
- ฟังก์ชัน HTTPS
- ฟังก์ชันที่เรียกได้
- ฟังก์ชันเบื้องหลังที่เรียกใช้จากการตรวจสอบสิทธิ์ Firebase, ฐานข้อมูลเรียลไทม์, Cloud Firestore, Cloud Storage และ Cloud Pub/Sub
คุณสามารถเรียกใช้ฟังก์ชันในเครื่องเพื่อทดสอบได้ก่อนที่จะปรับใช้กับการใช้งานจริง
ติดตั้ง Firebase CLI
หากต้องการใช้โปรแกรมจำลอง Cloud Functions ก่อนอื่นให้ติดตั้ง Firebase CLI:
npm install -g firebase-tools
ในการใช้โปรแกรมจำลองในเครื่อง Cloud Functions ของคุณต้องขึ้นอยู่กับ:
-
firebase-admin
เวอร์ชัน8.0.0
ขึ้นไป -
firebase-functions
เวอร์ชัน3.0.0
หรือสูงกว่า
ตั้งค่าข้อมูลประจำตัวของผู้ดูแลระบบ (ไม่บังคับ)
หากคุณต้องการให้การทดสอบฟังก์ชันโต้ตอบกับ Google API หรือ Firebase API อื่นๆ ผ่าน Firebase Admin SDK คุณอาจต้องตั้งค่าข้อมูลรับรองผู้ดูแลระบบ
- ทริกเกอร์ Cloud Firestore และ Realtime Database มีข้อมูลรับรองเพียงพออยู่แล้ว และ ไม่ ต้องการการตั้งค่าเพิ่มเติม
- API อื่นๆ ทั้งหมด รวมถึง Firebase API เช่น Authentication และ FCM หรือ Google APIs เช่น Cloud Translation หรือ Cloud Speech ต้องมีขั้นตอนการตั้งค่าที่อธิบายไว้ในส่วนนี้ สิ่งนี้ใช้ได้ไม่ว่าคุณจะใช้เชลล์ Cloud Functions หรือ
firebase emulators:start
ในการตั้งค่าข้อมูลประจำตัวของผู้ดูแลระบบสำหรับฟังก์ชันที่จำลอง:
- เปิด บานหน้าต่างบัญชีบริการ ของ Google Cloud Console
- ตรวจสอบให้แน่ใจว่าได้เลือก บัญชีบริการเริ่มต้นของ App Engine และใช้เมนูตัวเลือกที่ด้านขวาเพื่อเลือก สร้างคีย์
- เมื่อได้รับแจ้ง ให้เลือก JSON สำหรับประเภทคีย์ แล้วคลิก Create
ตั้งค่าข้อมูลรับรองเริ่มต้นของ Google ให้ชี้ไปที่คีย์ที่ดาวน์โหลด:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase emulators:start
Windows
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 ดังนี้:
Android
// 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);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://localhost:5001")
Web version 9
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "localhost", 5001);
Web version 8
firebase.functions().useEmulator("localhost", 5001);
เครื่องมือแอปของคุณสำหรับการจำลองฟังก์ชัน HTTPS
ฟังก์ชัน HTTPS แต่ละรายการในโค้ดของคุณจะให้บริการจากโปรแกรมจำลองในเครื่องโดยใช้รูปแบบ URL ต่อไปนี้:
http:// $HOST : $PORT / $PROJECT / $REGION / $NAME
ตัวอย่างเช่น ฟังก์ชัน helloWorld
อย่างง่ายที่มีพอร์ตโฮสต์เริ่มต้นและภูมิภาคจะให้บริการที่:
https://localhost:5001/ $PROJECT /us-central1/helloWorld
ปรับแต่งแอปของคุณสำหรับการจำลองฟังก์ชันการทำงานเบื้องหลัง
โปรแกรมจำลอง Cloud Functions รองรับฟังก์ชันที่ทริกเกอร์พื้นหลังจากแหล่งที่มาต่อไปนี้:
- โปรแกรมจำลองฐานข้อมูลเรียลไทม์
- โปรแกรมจำลอง Cloud Firestore
- ตัวจำลองการตรวจสอบสิทธิ์
- โปรแกรมจำลองผับ/ย่อย
หากต้องการทริกเกอร์เหตุการณ์พื้นหลัง ให้เชื่อมต่อแอปหรือโค้ดทดสอบกับอีมูเลเตอร์โดยใช้ SDK สำหรับแพลตฟอร์มของคุณ
การโต้ตอบกับบริการอื่น ๆ
ชุดโปรแกรมจำลองประกอบด้วยโปรแกรมจำลองหลายตัว ซึ่งช่วยให้ทดสอบการโต้ตอบข้ามผลิตภัณฑ์ได้
Cloud Firestore
หากคุณมีฟังก์ชันที่ใช้ Firebase Admin SDK เพื่อเขียนไปยัง Cloud Firestore การเขียนเหล่านี้จะถูกส่งไปยังโปรแกรมจำลอง Cloud Firestore หากทำงานอยู่ หากฟังก์ชันเพิ่มเติมถูกทริกเกอร์โดยการเขียนเหล่านั้น ฟังก์ชันเหล่านั้นจะถูกเรียกใช้ในโปรแกรมจำลอง Cloud Functions
การจัดเก็บเมฆ
หากคุณมีฟังก์ชันที่ใช้ Firebase Admin SDK (เวอร์ชัน 9.7.0 ขึ้นไป) เพื่อเขียนไปยัง Cloud Storage การเขียนเหล่านี้จะถูกส่งไปยังโปรแกรมจำลอง Cloud Storage หากทำงานอยู่ หากฟังก์ชันเพิ่มเติมถูกทริกเกอร์โดยการเขียนเหล่านั้น ฟังก์ชันเหล่านั้นจะถูกเรียกใช้ในโปรแกรมจำลอง Cloud Functions
การตรวจสอบสิทธิ์ Firebase
หากคุณมีฟังก์ชันที่ใช้ Firebase Admin SDK (เวอร์ชัน 9.3.0 ขึ้นไป) เพื่อเขียนไปยัง Firebase Authentication การเขียนเหล่านี้จะถูกส่งไปยังโปรแกรมจำลอง Auth หากทำงานอยู่ หากฟังก์ชันเพิ่มเติมถูกทริกเกอร์โดยการเขียนเหล่านั้น ฟังก์ชันเหล่านั้นจะถูกเรียกใช้ในโปรแกรมจำลอง Cloud Functions
Firebase Hosting
หากคุณกำลังใช้ Cloud Functions เพื่อ สร้างเนื้อหาแบบไดนามิกสำหรับ Firebase Hosting ตัว firebase emulators:start
จะใช้ฟังก์ชัน HTTP ในเครื่องของคุณเป็นพร็อกซีสำหรับการโฮสต์
การบันทึก
อีมูเลเตอร์สตรีมบันทึกจากฟังก์ชันของคุณไปยังหน้าต่างเทอร์มินัลที่รัน มันแสดงผลทั้งหมดจากคำสั่ง console.log()
, console.info()
, console.error()
และ console.warn()
ภายในฟังก์ชันของคุณ
ขั้นตอนถัดไป
สำหรับตัวอย่างแบบเต็มของการใช้ชุดโปรแกรมจำลอง Firebase โปรดดู ตัวอย่างการทดสอบการเริ่มต้นอย่างรวดเร็ว