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

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 โดยอิงตามผลิตภัณฑ์ที่คุณเริ่มต้นในโปรเจ็กต์ที่อยู่ในเครื่องโดยใช้ firebase init หากต้องการเริ่มโปรแกรมจำลองที่เฉพาะเจาะจง ให้ใช้แฟล็ก --only ดังนี้

firebase emulators:start --only functions

หากต้องการเรียกใช้ชุดโปรแกรมทดสอบหรือสคริปต์ทดสอบหลังจากที่โปรแกรมจำลองเริ่มทำงานแล้ว ให้ใช้คำสั่ง emulators:exec ดังนี้

firebase emulators:exec "./my-test.sh"

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

โปรดทราบว่าเอาต์พุตของโปรแกรมจำลองจะจำลองการติดตั้งใช้งานฟังก์ชันโดยค่าเริ่มต้นในภูมิภาคที่เฉพาะเจาะจง (us-central1) ซึ่งอาจไม่ตรงกับภูมิภาคเริ่มต้นของการติดตั้งใช้งานเวอร์ชันที่ใช้งานจริง ดูข้อมูลเพิ่มเติมเกี่ยวกับภูมิภาคได้ที่ตำแหน่งของ Cloud Functions

ใช้เครื่องมือในแอปเพื่อสื่อสารกับโปรแกรมจำลอง

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

ใช้เครื่องมือในแอปสำหรับฟังก์ชันที่เรียกใช้ได้

หากกิจกรรมการสร้างต้นแบบและการทดสอบเกี่ยวข้องกับฟังก์ชันแบ็กเอนด์ที่เรียกใช้ได้ ให้กำหนดค่าการโต้ตอบกับโปรแกรมจำลอง 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)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance;
// Connects to the Functions Emulator running on port 5001
functions.UseFunctionsEmulator("http://127.0.0.1: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 เพื่อเรียกใช้แฮนเดิลที่ลงทะเบียนไว้

คุณสามารถตรวจสอบบันทึกของ 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 (รวมถึงในบันทึก)

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

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