Catch up on highlights from Firebase at Google I/O 2023. Learn more

เรียกใช้ฟังก์ชันในเครื่อง

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

ในการตั้งค่าข้อมูลประจำตัวของผู้ดูแลระบบสำหรับฟังก์ชันที่เลียนแบบ:

  1. เปิด บานหน้าต่างบัญชีบริการ ของ Google Cloud Console
  2. ตรวจสอบให้แน่ใจว่าได้เลือก บัญชีบริการเริ่มต้นของ App Engine แล้ว และใช้เมนูตัวเลือกทางด้านขวาเพื่อเลือก สร้างรหัส
  3. เมื่อได้รับแจ้ง ให้เลือก JSON สำหรับประเภทคีย์ แล้วคลิก สร้าง
  4. ตั้งค่าข้อมูลรับรองเริ่มต้นของ 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().useEmulator(withHost: "localhost", port: 5001)

Web modular API

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "localhost", 5001);

Web namespaced API

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
  • โปรแกรมจำลองการตรวจสอบสิทธิ์
  • โปรแกรมจำลอง 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 โปรดดู ตัวอย่างการทดสอบการเริ่มต้นอย่างรวดเร็ว