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

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

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

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

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

Web

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

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

Web

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

ใช้เครื่องมือในแอปเพื่อจำลองฟังก์ชันคิวของงาน

โปรแกรมจำลองจะตั้งค่าคิวของงานจำลองโดยอัตโนมัติตามคำจำกัดความของทริกเกอร์ และ Admin SDK จะเปลี่ยนเส้นทางคำขอที่เข้าคิวไปยังโปรแกรมจำลองหาก ตรวจพบว่ากำลังทำงานผ่านตัวแปรสภาพแวดล้อม CLOUD_TASKS_EMULATOR_HOST

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

ใช้งานแอปเพื่อจำลองฟังก์ชันที่ทริกเกอร์ในเบื้องหลัง

โปรแกรมจำลอง Cloud Functions รองรับฟังก์ชันที่ทริกเกอร์ในเบื้องหลังจากแหล่งที่มาต่อไปนี้

  • โปรแกรมจำลอง Realtime Database
  • โปรแกรมจำลอง Cloud Firestore
  • โปรแกรมจำลอง Authentication
  • โปรแกรมจำลอง Pub/Sub
  • โปรแกรมจำลองการแจ้งเตือนของ Firebase

หากต้องการทริกเกอร์เหตุการณ์ในเบื้องหลัง ให้แก้ไขทรัพยากรแบ็กเอนด์โดยใช้ 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 คุณสามารถ แก้ไขพอร์ตเริ่มต้นได้ตามที่อธิบายไว้ในส่วนกำหนดค่า Local Emulator Suite

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

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

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

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

Cloud Firestore

หากคุณมีฟังก์ชันที่ใช้ Firebase Admin SDK เพื่อเขียนไปยัง Cloud Firestore ระบบจะส่งการเขียนเหล่านี้ไปยังโปรแกรมจำลอง Cloud Firestore หากกำลังทำงานอยู่ หากการเขียนเหล่านั้นทริกเกอร์ฟังก์ชันอื่นๆ ระบบจะเรียกใช้ฟังก์ชันเหล่านั้นในCloud Functionsโปรแกรมจำลอง

Cloud Storage

หากคุณมีฟังก์ชันที่ใช้ Firebase Admin SDK (เวอร์ชัน 9.7.0 ขึ้นไป) เพื่อเขียนไปยัง Cloud Storage ระบบจะส่งการเขียนเหล่านี้ไปยังโปรแกรมจำลอง Cloud Storage หากกำลังทำงานอยู่ หากการเขียนเหล่านั้นทริกเกอร์ฟังก์ชันอื่นๆ ระบบจะเรียกใช้ฟังก์ชันเหล่านั้นในCloud Functionsโปรแกรมจำลอง

Firebase Authentication

หากคุณมีฟังก์ชันที่ใช้ Firebase Admin SDK (เวอร์ชัน 9.3.0 ขึ้นไป) เพื่อเขียนไปยัง Firebase Authentication ระบบจะส่งการเขียนเหล่านี้ไปยังโปรแกรมจำลอง Auth หากกำลังทำงานอยู่ หากการเขียนเหล่านั้นทริกเกอร์ฟังก์ชันอื่นๆ ระบบจะเรียกใช้ฟังก์ชันเหล่านั้นในCloud Functionsโปรแกรมจำลอง

โฮสติ้งของ Firebase

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

การแจ้งเตือนสำหรับ Firebase

ในโปรเจ็กต์ที่มีทริกเกอร์การแจ้งเตือน Firebase ที่รองรับอย่างน้อย 1 รายการ UI ของ โปรแกรมจำลองจะมีแท็บ FireAlerts วิธีจำลองการทริกเกอร์การแจ้งเตือน

  1. เปิดแท็บ FireAlerts แท็บนี้จะแสดงเมนูแบบเลื่อนลงที่ป้อนข้อมูล ประเภทการแจ้งเตือนที่มีทริกเกอร์เชื่อมโยงอยู่ (เช่น หากคุณมีทริกเกอร์ onNewFatalIssuePublished ระบบจะแสดง crashlytics.newFatalIssue)
  2. เลือกประเภทการแจ้งเตือน แบบฟอร์มจะป้อนค่าเริ่มต้นโดยอัตโนมัติ ซึ่ง แก้ไขได้ คุณแก้ไขฟิลด์ของเหตุการณ์ได้ (ระบบจะอนุมานข้อมูลอื่นๆ จากเหตุการณ์การแจ้งเตือน ค่าจำลอง หรือสร้างแบบสุ่ม)
  3. เลือกส่งการแจ้งเตือนเพื่อส่งการแจ้งเตือนสังเคราะห์ไปยังโปรแกรมจำลองฟังก์ชัน โดยมีบันทึกให้ดูในการแจ้งเตือนในFirebase คอนโซล (รวมถึงในบันทึก)

การบันทึก

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

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

ดูตัวอย่างการใช้ Firebase Emulator Suite แบบเต็มได้ที่ตัวอย่างการเริ่มต้นใช้งานการทดสอบอย่างรวดเร็ว