Trước khi kết nối ứng dụng với trình mô phỏng Cloud Functions, hãy đảm bảo rằng bạn hiểu quy trình làm việc tổng thể của Firebase Local Emulator Suite, đồng thời cài đặt và định cấu hình Local Emulator Suite và xem xét các lệnh CLI của bộ công cụ này.
Chọn một dự án Firebase
Firebase Local Emulator Suite mô phỏng các sản phẩm cho một dự án Firebase.
Để chọn dự án cần sử dụng, trước khi bắt đầu trình mô phỏng, trong CLI, hãy chạy
firebase use trong thư mục làm việc. Hoặc bạn có thể truyền
cờ --project cho mỗi lệnh trình mô phỏng
command.
Local Emulator Suite hỗ trợ mô phỏng các dự án Firebase thực và bản trình diễn.
| Loại dự án | Tính năng | Sử dụng với trình mô phỏng |
|---|---|---|
| Thực |
Dự án Firebase thực là dự án mà bạn đã tạo và định cấu hình (rất có thể thông qua bảng điều khiển Firebase). Dự án thực có các tài nguyên đang hoạt động, chẳng hạn như thực thể cơ sở dữ liệu, nhóm lưu trữ , hàm hoặc bất kỳ tài nguyên nào khác mà bạn thiết lập cho dự án Firebase đó. |
Khi làm việc với các dự án Firebase thực, bạn có thể chạy trình mô phỏng cho bất kỳ hoặc tất cả các sản phẩm được hỗ trợ. Đối với bất kỳ sản phẩm nào mà bạn không mô phỏng, ứng dụng và mã của bạn sẽ tương tác với tài nguyên đang hoạt động (thực thể cơ sở dữ liệu, nhóm lưu trữ, hàm, v.v.). |
| Bản trình diễn |
Dự án Firebase bản trình diễn không có cấu hình Firebase thực và không có tài nguyên đang hoạt động. Bạn thường truy cập vào các dự án này thông qua codelab hoặc các hướng dẫn khác. Mã dự án cho các dự án bản trình diễn có tiền tố |
Khi làm việc với các dự án Firebase bản trình diễn, ứng dụng và mã của bạn tương tác với trình mô phỏng chỉ. Nếu ứng dụng của bạn cố gắng tương tác với một tài nguyên mà trình mô phỏng không chạy, thì mã đó sẽ không thành công. |
Bạn nên sử dụng các dự án bản trình diễn bất cứ khi nào có thể. Các lợi ích bao gồm:
- Dễ thiết lập hơn vì bạn có thể chạy trình mô phỏng mà không cần tạo dự án Firebase
- An toàn hơn vì nếu mã của bạn vô tình gọi các tài nguyên không được mô phỏng (sản xuất), thì sẽ không có khả năng thay đổi dữ liệu, mức sử dụng và hoá đơn
- Hỗ trợ ngoại tuyến tốt hơn vì bạn không cần truy cập Internet để tải cấu hình SDK xuống.
Đo lường ứng dụng để giao tiếp với trình mô phỏng
Đo lường ứng dụng cho các hàm có thể gọi
Nếu nguyên mẫu và hoạt động kiểm thử của bạn liên quan đến các hàm có thể gọi ở phần phụ trợ callable backend functions, hãy định cấu hình tương tác với trình mô phỏng Cloud Functions for Firebase emulator như sau:
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);
Đo lường ứng dụng để mô phỏng các hàm HTTPS
Mỗi hàm HTTPS trong mã của bạn sẽ được cung cấp từ trình mô phỏng cục bộ bằng định dạng URL sau:
http://$HOST:$PORT/$PROJECT/$REGION/$NAME
Ví dụ: một hàm helloWorld đơn giản có cổng và khu vực máy chủ mặc định sẽ được cung cấp tại:
https://localhost:5001/$PROJECT/us-central1/helloWorld
Đo lường ứng dụng để mô phỏng các hàm hàng đợi tác vụ
Trình mô phỏng tự động thiết lập các hàng đợi tác vụ được mô phỏng dựa trên định nghĩa về trình kích hoạt
và SDK quản trị sẽ định tuyến lại các yêu cầu được xếp hàng đợi đến trình mô phỏng nếu
phát hiện thấy trình mô phỏng đang chạy thông qua biến môi trường
CLOUD_TASKS_EMULATOR_HOST.
Xin lưu ý rằng hệ thống phân phối được sử dụng trong phiên bản chính thức phức tạp hơn hệ thống được triển khai trong trình mô phỏng. Vì vậy, bạn không nên mong đợi hành vi được mô phỏng sẽ phản ánh chính xác môi trường phiên bản chính thức. Các tham số trong trình mô phỏng cung cấp giới hạn trên cho tốc độ phân phối và thử lại tác vụ.
Đo lường ứng dụng để mô phỏng các hàm được kích hoạt trong nền
Trình mô phỏng Cloud Functions hỗ trợ các hàm được kích hoạt trong nền từ các nguồn sau:
- Trình mô phỏng Realtime Database
- Trình mô phỏng Cloud Firestore
- Trình mô phỏng Authentication
- Pub/Sub trình mô phỏng
- Trình mô phỏng cảnh báo Firebase
Để kích hoạt các sự kiện trong nền, hãy sửa đổi tài nguyên phụ trợ bằng cách sử dụng Emulator Suite UI, hoặc bằng cách kết nối ứng dụng hoặc mã kiểm thử với trình mô phỏng bằng SDK cho nền tảng của bạn.
Kiểm thử trình xử lý cho các sự kiện tuỳ chỉnh do Tiện ích phát ra
Đối với các hàm mà bạn triển khai để xử lý Firebase Extensions sự kiện tuỳ chỉnh bằng Cloud Functions phiên bản 2, trình mô phỏng Cloud Functions sẽ ghép nối với trình mô phỏng Eventarc để hỗ trợ trình kích hoạt Eventarc.
Để kiểm thử trình xử lý sự kiện tuỳ chỉnh cho các tiện ích phát ra sự kiện, bạn phải cài đặt trình mô phỏng Cloud Functions và Eventarc.
Thời gian chạy Cloud Functions đặt biến môi trường EVENTARC_EMULATOR
thành localhost:9299 trong quy trình hiện tại nếu trình mô phỏng Eventarc
đang chạy. Các Firebase Admin SDK tự động kết nối với trình mô phỏng Eventarc
khi biến môi trường EVENTARC_EMULATOR được đặt. Bạn có thể
sửa đổi cổng mặc định như đã thảo luận trong phần Định cấu hình Local Emulator Suite.
Khi các biến môi trường được định cấu hình đúng cách, Firebase Admin SDK sẽ tự động gửi sự kiện đến trình mô phỏng Eventarc. Đến lượt mình, trình mô phỏng Eventarc sẽ gọi lại trình mô phỏng Cloud Functions để kích hoạt mọi trình xử lý đã đăng ký.
Bạn có thể kiểm tra nhật ký Hàm trong Emulator Suite UI để biết thông tin chi tiết về việc thực thi trình xử lý.
Định cấu hình môi trường kiểm thử cục bộ
Nếu các hàm của bạn dựa vào cấu hình môi trường dựa trên dotenv , bạn có thể mô phỏng hành vi đó trong môi trường kiểm thử cục bộ.
Khi sử dụng trình mô phỏng Cloud Functions cục bộ, bạn có thể ghi đè các biến môi trường
cho dự án của mình bằng cách thiết lập tệp .env.local Nội dung của
.env.local sẽ được ưu tiên hơn .env và tệp .env dành riêng cho dự án.
Ví dụ: một dự án có thể bao gồm 3 tệp này chứa các giá trị hơi khác nhau cho quá trình phát triển và kiểm thử cục bộ:
.env
|
.env.dev
|
.env.local
|
| PLANET=Earth
AUDIENCE=Humans |
AUDIENCE=Dev Humans | AUDIENCE=Local Humans |
Khi được bắt đầu trong ngữ cảnh cục bộ, trình mô phỏng sẽ tải các biến môi trường như sau:
$ firebase emulators:start
i emulators: Starting emulators: functions
# Starts emulator with following environment variables:
# PLANET=Earth
# AUDIENCE=Local Humans
Thông tin bí mật và thông tin xác thực trong trình mô phỏng Cloud Functions
Trình mô phỏng Cloud Functions hỗ trợ việc sử dụng thông tin bí mật để lưu trữ và truy cập thông tin cấu hình nhạy cảm. Theo mặc định, trình mô phỏng sẽ cố gắng truy cập vào thông tin bí mật của phiên bản chính thức bằng thông tin xác thực mặc định của ứng dụng. Trong một số trường hợp như môi trường CI, trình mô phỏng có thể không truy cập được vào các giá trị bí mật do các hạn chế về quyền.
Tương tự như tính năng hỗ trợ trình mô phỏng Cloud Functions cho các biến môi trường, bạn có thể
ghi đè các giá trị bí mật bằng cách thiết lập tệp .secret.local. Điều này giúp bạn dễ dàng
kiểm thử các hàm cục bộ, đặc biệt là nếu bạn không có quyền truy cập
vào giá trị bí mật.
Có những công cụ nào khác để kiểm thử Cloud Functions?
Trình mô phỏng Cloud Functions được bổ sung bằng các công cụ kiểm thử và nguyên mẫu khác:
- Vỏ Cloud Functions cho phép tạo nguyên mẫu và phát triển hàm lặp đi lặp lại, tương tác. Vỏ này sử dụng trình mô phỏng Cloud Functions với giao diện kiểu REPL để phát triển. Không có tính năng tích hợp với trình mô phỏng Cloud Firestore hoặc Realtime Database. Khi sử dụng vỏ, bạn sẽ mô phỏng dữ liệu và thực hiện các lệnh gọi hàm để mô phỏng tương tác với các sản phẩm mà Bộ công cụ mô phỏng trên thiết bịLocal Emulator Suitehiện không hỗ trợ: Analytics, Remote Config và Crashlytics.
- SDK kiểm thử Firebase cho Cloud Functions, một Node.js có khung mocha để phát triển hàm. Trên thực tế, SDK kiểm thử Cloud Functions cung cấp tính năng tự động hoá trên vỏ Cloud Functions.
Bạn có thể tìm hiểu thêm về vỏ Cloud Functions và SDK kiểm thử Cloud Functions tại Kiểm thử hàm một cách tương tác và Kiểm thử đơn vị Cloud Functions.
Sự khác biệt giữa trình mô phỏng Cloud Functions và phiên bản chính thức
Trình mô phỏng Cloud Functions khá giống với môi trường phiên bản chính thức đối với phần lớn các trường hợp sử dụng. Chúng tôi đã nỗ lực rất nhiều để đảm bảo mọi thứ trong thời gian chạy Node đều gần với phiên bản chính thức nhất có thể. Tuy nhiên, trình mô phỏng không mô phỏng toàn bộ môi trường phiên bản chính thức được chứa trong vùng chứa.Vì vậy, mặc dù mã hàm của bạn sẽ thực thi một cách thực tế, nhưng các khía cạnh khác của môi trường (tức là tệp cục bộ, hành vi sau khi hàm gặp sự cố, v. v.) sẽ khác.
Cloud IAM
Bộ công cụ mô phỏng Firebase không cố gắng sao chép hoặc tuân thủ bất kỳ hành vi nào liên quan đến IAM để chạy. Trình mô phỏng tuân thủ Quy tắc bảo mật Firebase được cung cấp, nhưng trong những trường hợp mà IAM thường được sử dụng, chẳng hạn như để đặt tài khoản dịch vụ gọi Cloud Functions và do đó là quyền, trình mô phỏng không thể cấu hình và sẽ sử dụng tài khoản có sẵn trên toàn cầu trên máy dành cho nhà phát triển của bạn, tương tự như việc chạy trực tiếp một tập lệnh cục bộ.
Hạn chế về bộ nhớ và bộ xử lý
Trình mô phỏng không thực thi các hạn chế về bộ nhớ hoặc bộ xử lý cho các hàm của bạn. Tuy nhiên, trình mô phỏng có hỗ trợ thời gian chờ cho các hàm thông qua đối số thời gian chạy
timeoutSeconds.
Xin lưu ý rằng thời gian thực thi hàm có thể khác với phiên bản chính thức khi các hàm được chạy trong trình mô phỏng. Bạn nên chạy các kiểm thử có giới hạn trong phiên bản chính thức sau khi đã thiết kế và kiểm thử các hàm bằng trình mô phỏng để xác nhận thời gian thực thi.
Lập kế hoạch cho sự khác biệt trong môi trường cục bộ và phiên bản chính thức
Vì trình mô phỏng chạy trên máy cục bộ, nên trình mô phỏng này phụ thuộc vào môi trường cục bộ của bạn đối với các ứng dụng và chương trình cũng như tiện ích tích hợp.
Xin lưu ý rằng môi trường cục bộ của bạn để phát triển Cloud Functions có thể khác với môi trường phiên bản chính thức của Google:
Các ứng dụng mà bạn cài đặt cục bộ để mô phỏng môi trường phiên bản chính thức (ví dụ: ImageMagick từ hướng dẫn này) có thể có hành vi khác với phiên bản chính thức, đặc biệt là nếu bạn yêu cầu một phiên bản khác hoặc phát triển trong môi trường không phải Linux. Hãy cân nhắc việc triển khai bản sao nhị phân của riêng bạn cho chương trình bị thiếu cùng với việc triển khai hàm.
Tương tự, các tiện ích tích hợp (ví dụ: các lệnh shell như
ls,mkdir) có thể khác với các phiên bản có sẵn trong phiên bản chính thức, đặc biệt là nếu bạn đang phát triển trong môi trường không phải Linux (ví dụ: macOS). Bạn có thể xử lý vấn đề này bằng cách sử dụng các lựa chọn thay thế chỉ dành cho Node cho các lệnh gốc hoặc bằng cách xây dựng các tệp nhị phân Linux để gói cùng với quá trình triển khai.
Đang thử lại
Trình mô phỏng Cloud Functions không hỗ trợ thử lại các hàm khi không thành công.
Bước tiếp theo?
- Để xem một bộ video được tuyển chọn và các ví dụ chi tiết về cách thực hiện, hãy theo dõi Danh sách phát đào tạo về trình mô phỏng Firebase.
- Tìm hiểu thêm về trình mô phỏng Cloud Functions for Firebase tại Chạy hàm cục bộ.