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

Firebase CLI มีโปรแกรมจำลอง Cloud Functions ซึ่งสามารถจำลองประเภทฟังก์ชันต่อไปนี้ได้

  • ฟังก์ชัน HTTPS
  • ฟังก์ชั่นที่สามารถเรียกได้
  • ฟังก์ชันพื้นหลังที่ทริกเกอร์จากการตรวจสอบสิทธิ์ Firebase, ฐานข้อมูลเรียลไทม์, 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 และ Realtime Database มีข้อมูลเข้าสู่ระบบเพียงพอแล้ว และ ไม่ จำเป็นต้องตั้งค่าเพิ่มเติม
  • API อื่นๆ ทั้งหมด รวมถึง Firebase API เช่น การตรวจสอบสิทธิ์และ FCM หรือ Google API เช่น Cloud Translation หรือ Cloud Speech จำเป็นต้องมีขั้นตอนการตั้งค่าที่อธิบายไว้ในส่วนนี้ สิ่งนี้มีผลไม่ว่าคุณจะใช้เชลล์ Cloud Functions หรือ firebase emulators:start

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

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

ติดตั้งแอปของคุณเพื่อพูดคุยกับอีมูเลเตอร์

หากต้องการติดตั้งแอปของคุณเพื่อโต้ตอบกับโปรแกรมจำลอง คุณอาจต้องกำหนดค่าเพิ่มเติมบางอย่าง

ติดตั้งแอปของคุณสำหรับฟังก์ชันที่สามารถเรียกได้

หากกิจกรรมต้นแบบและการทดสอบของคุณเกี่ยวข้องกับ ฟังก์ชันแบ็กเอนด์ที่เรียกได้ ให้ กำหนดค่าการโต้ตอบกับฟังก์ชันคลาวด์สำหรับโปรแกรมจำลอง 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 Firestore
  • โปรแกรมจำลองการรับรองความถูกต้อง
  • โปรแกรมจำลองผับ/ย่อย

หากต้องการทริกเกอร์เหตุการณ์เบื้องหลัง ให้แก้ไขทรัพยากรแบ็คเอนด์โดยใช้ Emulator Suite UI หรือโดยการเชื่อมต่อแอปหรือโค้ดทดสอบของคุณกับโปรแกรมจำลองโดยใช้ SDK สำหรับแพลตฟอร์มของคุณ

ตัวจัดการทดสอบสำหรับเหตุการณ์ที่กำหนดเองที่ปล่อยออกมาโดยส่วนขยาย

สำหรับฟังก์ชันที่คุณใช้เพื่อจัดการเหตุการณ์ที่กำหนดเองของ Firebase Extensions ด้วย Cloud Functions v2 ตัวจำลองฟังก์ชันคลาวด์จะจับคู่กับตัวจำลอง Eventarc เพื่อรองรับ ทริกเกอร์ Eventarc

หากต้องการทดสอบเครื่องจัดการเหตุการณ์ที่กำหนดเองสำหรับส่วนขยายที่ปล่อยเหตุการณ์ คุณต้องติดตั้งโปรแกรมจำลอง Cloud Functions และ Eventarc

รันไทม์ของฟังก์ชันคลาวด์จะตั้งค่าตัวแปรสภาพแวดล้อม EVENTARC_EMULATOR เป็น localhost:9299 ในกระบวนการปัจจุบัน หากตัวจำลอง Eventarc กำลังทำงานอยู่ Firebase Admin SDK จะเชื่อมต่อกับโปรแกรมจำลอง Eventarc โดยอัตโนมัติเมื่อมีการตั้งค่าตัวแปรสภาพแวดล้อม EVENTARC_EMULATOR คุณสามารถแก้ไขพอร์ตเริ่มต้นตามที่กล่าวไว้ใน Configure Local Emulator Suite

เมื่อตัวแปรสภาพแวดล้อมได้รับการกำหนดค่าอย่างเหมาะสม Firebase Admin SDK จะส่งเหตุการณ์ไปยังโปรแกรมจำลอง Eventarc โดยอัตโนมัติ ในทางกลับกัน โปรแกรมจำลอง Eventarc จะทำการเรียกกลับไปยังโปรแกรมจำลองฟังก์ชันคลาวด์เพื่อทริกเกอร์ตัวจัดการที่ลงทะเบียนไว้

คุณสามารถตรวจสอบบันทึกฟังก์ชันใน Emulator Suite UI เพื่อดูรายละเอียดเกี่ยวกับการดำเนินการของตัวจัดการได้

การโต้ตอบกับบริการอื่น ๆ

ชุดโปรแกรมจำลองประกอบด้วยโปรแกรมจำลองหลายรายการ ซึ่งช่วยให้สามารถทดสอบการโต้ตอบข้ามผลิตภัณฑ์ได้

คลาวด์ไฟร์สโตร์

หากคุณมีฟังก์ชันที่ใช้ 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 emulator หากกำลังทำงานอยู่ หากการเขียนเหล่านั้นทริกเกอร์ฟังก์ชันเพิ่มเติม ฟังก์ชันเหล่านั้นจะทำงานในโปรแกรมจำลอง Cloud Functions

โฮสติ้ง Firebase

หากคุณใช้ฟังก์ชันคลาวด์เพื่อ สร้างเนื้อหาแบบไดนามิกสำหรับโฮสติ้งของ Firebase firebase emulators:start จะใช้ฟังก์ชัน HTTP ในเครื่องของคุณเป็นพร็อกซีสำหรับการโฮสต์

การบันทึก

โปรแกรมจำลองจะสตรีมบันทึกจากฟังก์ชันของคุณไปยังหน้าต่างเทอร์มินัลที่ฟังก์ชันทำงาน โดยจะแสดงเอาต์พุตทั้งหมดจากคำ console.log() , console.info() , console.error() และ console.warn() ภายในฟังก์ชันของคุณ

ขั้นตอนถัดไป

หากต้องการดูตัวอย่างการใช้ชุดโปรแกรมจำลอง Firebase ทั้งหมด โปรดดู ตัวอย่างการทดสอบการเริ่มต้นอย่างรวดเร็ว