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

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

  • ฟังก์ชัน HTTPS
  • ฟังก์ชันที่เรียกใช้ได้
  • ฟังก์ชันเบื้องหลังที่ทริกเกอร์จากการตรวจสอบสิทธิ์ Firebase, Realtime Database, 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 APIs หรือ Firebase API อื่นๆ ผ่าน Firebase Admin SDK คุณอาจต้องตั้งค่าข้อมูลเข้าสู่ระบบของผู้ดูแลระบบ

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

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 Functions รองรับฟังก์ชันที่ทริกเกอร์ในเบื้องหลังจากแหล่งที่มาต่อไปนี้

  • โปรแกรมจำลอง Realtime Database
  • โปรแกรมจำลอง Cloud Firestore
  • โปรแกรมจำลองการตรวจสอบสิทธิ์
  • โปรแกรมจำลอง Pub/Sub

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

ทดสอบเครื่องจัดการสำหรับเหตุการณ์ที่กำหนดเองซึ่งเกิดจากส่วนขยาย

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

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

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

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

คุณตรวจสอบบันทึกของฟังก์ชันได้ใน 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

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

โฮสติ้งของ Firebase

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

Logging

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

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

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