Trước khi kết nối ứng dụng của bạn với trình mô phỏng Cloud Firestore, hãy đảm bảo rằng bạn hiểu toàn bộ quy trình làm việc của Firebase Local Emulator Suite cũng như cài đặt và định cấu hình Local Emulator Suite cũng như xem lại các lệnh CLI của nó.
Chọn dự án Firebase
Bộ mô phỏng cục bộ Firebase mô phỏng các sản phẩm cho một dự án Firebase.
Để chọn dự án sẽ sử dụng, trước khi bạn khởi động trình mô phỏng, hãy chạy firebase use
trong thư mục làm việc của bạn. Hoặc bạn có thể chuyển cờ --project
cho mỗi lệnh trình mô phỏng.
Local Emulator Suite hỗ trợ mô phỏng các dự án Firebase thực và các dự án demo .
Loại dự án | Đặc trưng | Sử dụng với trình giả lập |
---|---|---|
Thực tế | Dự án Firebase thực sự là dự án bạn đã tạo và định cấu hình (rất có thể thông qua bảng điều khiển Firebase). Các dự án thực có tài nguyên trực tiếp, như phiên bản 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 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 trực tiếp (phiên bản cơ sở dữ liệu, nhóm lưu trữ, chức năng, v.v.). |
Thử nghiệm | Dự án Firebase demo không có cấu hình Firebase thực và không có tài nguyên trực tiếp. Những dự án này thường được truy cập thông qua các lớp học lập trình hoặc các hướng dẫn khác. ID dự án cho các dự án demo có tiền tố | Khi làm việc với các dự án Firebase demo, ứng dụng và mã của bạn chỉ tương tác với trình mô phỏng. Nếu ứng dụng của bạn cố gắng tương tác với tài nguyên mà trình mô phỏng không chạy thì mã đó sẽ không thành công. |
Chúng tôi khuyên bạn nên sử dụng các dự án demo bất cứ khi nào có thể. Lợi ích bao gồm:
- Thiết lập dễ dàng 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 cao hơn, vì nếu mã của bạn vô tình gọi các tài nguyên (sản xuất) không được mô phỏng thì sẽ không có cơ hội thay đổi dữ liệu, sử dụng và thanh toán
- Hỗ trợ ngoại tuyến tốt hơn vì không cần truy cập Internet để tải xuống cấu hình SDK của bạn.
Thiết lập ứng dụng của bạn để giao tiếp với trình mô phỏng
Khi khởi động, trình mô phỏng Cloud Firestore tạo cơ sở dữ liệu mặc định và cơ sở dữ liệu được đặt tên cho từng cấu hình firestore
trong tệp firebase.json
của bạn. Sử dụng tệp firebase.json
của bạn để chỉ định rõ ràng Quy tắc bảo mật của Cloud Firestore cho cơ sở dữ liệu được đặt tên.
Cơ sở dữ liệu được đặt tên cũng được tạo hoàn toàn để phản hồi bất kỳ lệnh gọi SDK hoặc API REST nào tới trình mô phỏng tham chiếu đến cơ sở dữ liệu cụ thể. Cơ sở dữ liệu được tạo ngầm như vậy hoạt động với các quy tắc mở .
Hiện tại, Giao diện người dùng Emulator Suite hỗ trợ công việc tương tác với cơ sở dữ liệu mặc định .
Nền tảng Android, Apple và SDK Web
Thiết lập cấu hình trong ứng dụng hoặc các lớp kiểm tra của bạn để tương tác với Cloud Firestore như sau. Lưu ý rằng trong các mẫu sau, mã ứng dụng đang kết nối với cơ sở dữ liệu dự án mặc định. Để biết các ví dụ liên quan đến cơ sở dữ liệu Cloud Firestore bổ sung ngoài cơ sở dữ liệu mặc định, hãy tham khảo hướng dẫn dành cho nhiều cơ sở dữ liệu .
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 firestore = Firebase.firestore firestore.useEmulator("10.0.2.2", 8080) firestore.firestoreSettings = firestoreSettings { isPersistenceEnabled = false }
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFirestore firestore = FirebaseFirestore.getInstance(); firestore.useEmulator("10.0.2.2", 8080); FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder() .setPersistenceEnabled(false) .build(); firestore.setFirestoreSettings(settings);
Nhanh
let settings = Firestore.firestore().settings settings.host = "127.0.0.1:8080" settings.isPersistenceEnabled = false settings.isSSLEnabled = false Firestore.firestore().settings = settings
Web modular API
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore"; // firebaseApps previously initialized using initializeApp() const db = getFirestore(); connectFirestoreEmulator(db, '127.0.0.1', 8080);
Web namespaced API
// Firebase previously initialized using firebase.initializeApp(). var db = firebase.firestore(); if (location.hostname === "localhost") { db.useEmulator("127.0.0.1", 8080); }
Không cần thiết lập bổ sung để kiểm tra Chức năng đám mây được kích hoạt bởi các sự kiện Firestore bằng trình mô phỏng. Khi cả trình mô phỏng Firestore và Cloud Functions đều chạy, chúng sẽ tự động hoạt động cùng nhau.
SDK quản trị
SDK quản trị Firebase tự động kết nối với trình mô phỏng Cloud Firestore khi biến môi trường FIRESTORE_EMULATOR_HOST
được đặt:
export FIRESTORE_EMULATOR_HOST="127.0.0.1:8080"
Nếu mã của bạn đang chạy bên trong trình mô phỏng Cloud Functions thì ID dự án của bạn và cấu hình khác sẽ tự động được đặt khi gọi initializeApp
.
Nếu muốn mã SDK quản trị của mình kết nối với trình mô phỏng dùng chung chạy trong môi trường khác, bạn cần chỉ định cùng ID dự án mà bạn đã đặt bằng Firebase CLI . Bạn có thể chuyển ID dự án trực tiếp tới initializeApp
hoặc đặt biến môi trường GCLOUD_PROJECT
.
SDK quản trị Node.js
admin.initializeApp({ projectId: "your-project-id" });
Biến môi trường
export GCLOUD_PROJECT="your-project-id"
Xóa cơ sở dữ liệu của bạn giữa các lần kiểm tra
Firestore sản xuất không cung cấp phương thức SDK nền tảng để xóa cơ sở dữ liệu, nhưng trình mô phỏng Firestore cung cấp cho bạn điểm cuối REST cụ thể cho mục đích này, điểm cuối này có thể được gọi từ bước thiết lập/phân tách khung kiểm tra, từ lớp kiểm tra hoặc từ trình bao (ví dụ: , với curl
) trước khi bài kiểm tra bắt đầu. Bạn có thể sử dụng phương pháp này như một giải pháp thay thế cho việc tắt quá trình mô phỏng.
Theo một phương pháp thích hợp, hãy thực hiện thao tác XÓA HTTP, cung cấp ID dự án Firebase của bạn, ví dụ firestore-emulator-example
, cho điểm cuối sau:
"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"
Đương nhiên, mã của bạn phải chờ xác nhận REST rằng quá trình xóa đã hoàn tất hoặc không thành công.
Bạn có thể thực hiện thao tác này từ shell:
// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"
Sau khi triển khai một bước như thế này, bạn có thể sắp xếp các thử nghiệm theo trình tự và kích hoạt các chức năng của mình một cách tự tin rằng dữ liệu cũ sẽ bị xóa giữa các lần chạy và bạn đang sử dụng cấu hình thử nghiệm cơ bản mới.
Nhập và xuất dữ liệu
Cơ sở dữ liệu và Bộ lưu trữ đám mây dành cho trình mô phỏng Firebase cho phép bạn xuất dữ liệu từ một phiên bản trình mô phỏng đang chạy. Xác định bộ dữ liệu cơ sở để sử dụng trong các bài kiểm tra đơn vị hoặc quy trình tích hợp liên tục của bạn, sau đó xuất dữ liệu đó để chia sẻ giữa nhóm.
firebase emulators:export ./dir
Trong các thử nghiệm, khi khởi động trình mô phỏng, hãy nhập dữ liệu cơ sở.
firebase emulators:start --import=./dir
Bạn có thể hướng dẫn trình mô phỏng xuất dữ liệu khi tắt máy, chỉ định đường dẫn xuất hoặc chỉ sử dụng đường dẫn được chuyển đến cờ --import
.
firebase emulators:start --import=./dir --export-on-exit
Các tùy chọn nhập và xuất dữ liệu này cũng hoạt động với lệnh firebase emulators:exec
. Để biết thêm, hãy tham khảo tài liệu tham khảo lệnh mô phỏng .
Trực quan hóa hoạt động Quy tắc bảo mật
Khi làm việc qua các vòng thử nghiệm và nguyên mẫu, bạn có thể sử dụng các công cụ trực quan hóa và báo cáo do Local Emulator Suite cung cấp.
Sử dụng Trình giám sát yêu cầu
Trình mô phỏng Cloud Firestore cho phép bạn trực quan hóa các yêu cầu của khách hàng trong Giao diện người dùng Bộ mô phỏng, bao gồm cả việc theo dõi đánh giá cho Quy tắc bảo mật của Firebase.
Mở tab Firestore > Yêu cầu để xem trình tự đánh giá chi tiết cho từng yêu cầu.
Trực quan hóa báo cáo đánh giá Quy tắc
Khi thêm Quy tắc bảo mật vào nguyên mẫu của mình, bạn có thể gỡ lỗi chúng bằng các công cụ gỡ lỗi Local Emulator Suite.
Sau khi chạy một bộ thử nghiệm, bạn có thể truy cập các báo cáo phạm vi thử nghiệm để biết cách đánh giá từng quy tắc bảo mật của bạn.
Để nhận báo cáo, hãy truy vấn điểm cuối hiển thị trên trình mô phỏng trong khi trình mô phỏng đang chạy. Để có phiên bản thân thiện với trình duyệt, hãy sử dụng URL sau:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
Điều này chia các quy tắc của bạn thành các biểu thức và biểu thức con mà bạn có thể di chuột qua để biết thêm thông tin, bao gồm số lượng đánh giá và giá trị được trả về. Đối với phiên bản JSON thô của dữ liệu này, hãy đưa URL sau vào truy vấn của bạn:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
Ở đây, phiên bản HTML của báo cáo nêu bật các đánh giá đưa ra lỗi không xác định và có giá trị null:
Trình giả lập Cloud Firestore khác với phiên bản sản xuất như thế nào
Trình mô phỏng Cloud Firestore cố gắng tái tạo một cách trung thực hành vi của dịch vụ sản xuất với một số hạn chế đáng chú ý.
Hỗ trợ nhiều cơ sở dữ liệu cho Cloud Firestore
Hiện tại, giao diện người dùng Emulator Suite hỗ trợ việc tạo, chỉnh sửa, xóa, giám sát yêu cầu và trực quan hóa bảo mật mang tính tương tác cho cơ sở dữ liệu mặc định chứ không phải cơ sở dữ liệu có tên bổ sung.
Tuy nhiên, bản thân trình mô phỏng sẽ tạo một cơ sở dữ liệu được đặt tên dựa trên cấu hình trong tệp firebase.json
của bạn và ngầm phản hồi các lệnh gọi API SDK hoặc REST.
Giao dịch
Trình mô phỏng hiện không triển khai tất cả hành vi giao dịch được thấy trong phiên bản chính thức. Khi bạn đang thử nghiệm các tính năng liên quan đến việc ghi nhiều lần đồng thời vào một tài liệu, trình mô phỏng có thể hoàn thành yêu cầu ghi chậm. Trong một số trường hợp, khóa có thể mất tới 30 giây mới được mở. Hãy cân nhắc việc điều chỉnh thời gian chờ kiểm tra cho phù hợp nếu cần.
Chỉ mục
Trình mô phỏng không theo dõi các chỉ mục phức hợp và thay vào đó sẽ thực thi bất kỳ truy vấn hợp lệ nào. Đảm bảo kiểm tra ứng dụng của bạn dựa trên phiên bản Cloud Firestore thực để xác định những chỉ mục nào bạn sẽ cần.
Hạn mức
Trình mô phỏng không thực thi tất cả các giới hạn được thực thi trong quá trình sản xuất. Ví dụ: trình mô phỏng có thể cho phép các giao dịch bị dịch vụ sản xuất từ chối vì quá lớn. Đảm bảo rằng bạn đã quen với các giới hạn được ghi lại và bạn thiết kế ứng dụng của mình để chủ động tránh chúng.
Tiếp theo là gì?
- Để có bộ video tuyển chọn và ví dụ hướng dẫn chi tiết, hãy theo dõi Danh sách phát đào tạo Trình mô phỏng Firebase .
- Điều tra các trường hợp sử dụng nâng cao liên quan đến kiểm tra Quy tắc bảo mật và SDK kiểm tra Firebase: Kiểm tra quy tắc bảo mật (Firestore) .
- Vì các chức năng được kích hoạt là một sự tích hợp điển hình với Cloud Firestore, hãy tìm hiểu thêm về Trình mô phỏng Chức năng đám mây cho Firebase tại Chạy chức năng cục bộ .