Trước khi kết nối ứng dụng với trình mô phỏng Cloud Firestore, 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, 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 trình mô phỏng 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 sẽ sử dụng, trước khi bạn khởi động trình mô phỏng, trong CLI, hãy chạy
firebase use
trong thư mục đang hoạt động của bạn. Hoặc bạn có thể truyền cờ --project
đến từng lệnh của 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 minh hoạ.
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ể là 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, chẳng hạn như các thực thể cơ sở dữ liệu, bộ chứa bộ nhớ, 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 (thực thể cơ sở dữ liệu, bộ chứa lưu trữ, hàm, v.v.). |
Bản trình diễn |
Dự án Firebase minh hoạ không có cấu hình Firebase thực và không có tài nguyên trực tiếp. Bạn thường truy cập vào các dự án này thông qua các lớp học lập trình hoặc các hướng dẫn khác. Mã dự án của các dự án minh hoạ có tiền tố |
Khi làm việc với các dự án Firebase minh hoạ, ứ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 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 minh hoạ 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
- Mức độ 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 không được mô phỏng (chính thức), thì sẽ không có khả năng thay đổi dữ liệu, mức sử dụng và thanh toán
- Hỗ trợ tốt hơn khi không có mạng, 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
Khi khởi động, trình mô phỏng Cloud Firestore sẽ tạo một cơ sở dữ liệu mặc định và một cơ sở dữ liệu được đặt tên cho mỗi cấu hình firestore
trong tệp firebase.json
.
Cơ sở dữ liệu được đặt tên cũng được tạo ngầm để phản hồi mọi lệnh gọi SDK hoặc API REST đến trình mô phỏng tham chiếu đến một cơ sở dữ liệu cụ thể. Các cơ sở dữ liệu được tạo ngầm ẩn như vậy hoạt động theo quy tắc mở.
Để làm việc với các cơ sở dữ liệu mặc định và cơ sở dữ liệu được đặt tên theo cách tương tác trong Emulator Suite UI, trong thanh địa chỉ của trình duyệt, hãy cập nhật URL để chọn cơ sở dữ liệu mặc định hoặc cơ sở dữ liệu được đặt tên.
- Ví dụ: để duyệt xem dữ liệu trong phiên bản mặc định, hãy cập nhật URL thành
localhost:4000/firestore/default/data
- Để duyệt xem trong một thực thể có tên
ecommerce
, hãy cập nhật lênlocalhost:4000/firestore/ecommerce/data
.
Android, nền tảng Apple và SDK web
Thiết lập cấu hình trong ứng dụng hoặc các lớp kiểm thử để tương tác với Cloud Firestore như sau. Xin 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 về 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);
Swift
let settings = Firestore.firestore().settings settings.host = "127.0.0.1:8080" settings.cacheSettings = MemoryCacheSettings() settings.isSSLEnabled = false Firestore.firestore().settings = settings
Web
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore"; // firebaseApps previously initialized using initializeApp() const db = getFirestore(); connectFirestoreEmulator(db, '127.0.0.1', 8080);
Web
// Firebase previously initialized using firebase.initializeApp(). var db = firebase.firestore(); if (location.hostname === "localhost") { db.useEmulator("127.0.0.1", 8080); }
Bạn không cần thiết lập thêm để kiểm thử các Hàm trên đám mây do các sự kiện Firestore kích hoạt bằng trình mô phỏng. Khi cả hai trình mô phỏng Firestore và Cloud Functions đang chạy, chúng sẽ tự động phối hợp hoạt động cùng nhau.
Admin SDK giây
Firebase Admin SDK sẽ tự động kết nối với trình mô phỏng Cloud Firestore khi đặt biến môi trường FIRESTORE_EMULATOR_HOST
:
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ì mã nhận dạng dự án và cấu hình khác sẽ tự động được đặt khi gọi initializeApp
.
Nếu muốn mã Admin SDK kết nối với một trình mô phỏng dùng chung chạy trong
một môi trường khác, bạn cần chỉ định cùng một mã dự án mà bạn đặt bằng giao diện dòng lệnh (CLI) của Firebase.
Bạn có thể truyền trực tiếp mã dự án đến initializeApp
hoặc đặt biến môi trường GCLOUD_PROJECT
.
SDK dành cho quản trị viên Node.js
admin.initializeApp({ projectId: "your-project-id" });
Biến môi trường
export GCLOUD_PROJECT="your-project-id"
Xoá cơ sở dữ liệu giữa các lần kiểm thử
Firestore phát hành công khai không cung cấp phương thức SDK nền tảng để xoá cơ sở dữ liệu, nhưng trình mô phỏng Firestore cung cấp cho bạn một điểm cuối REST dành riêng cho mục đích này. Bạn có thể gọi điểm cuối này từ bước thiết lập/tearDown của khung kiểm thử, từ lớp kiểm thử hoặc từ shell (ví dụ: với curl
) trước khi bắt đầu kiểm thử. Bạn có thể sử dụng phương pháp này thay vì chỉ tắt quy trình trình mô phỏng.
Thực hiện thao tác XÓA HTTP trong một phương thức thích hợp, cung cấp mã dự án Firebase của bạn, chẳng hạn như 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 sẽ chờ xác nhận REST về việc xả đã hoàn tất hay 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 bước như vậy, bạn có thể sắp xếp các bài kiểm thử và kích hoạt các hàm của mình mà không lo dữ liệu cũ sẽ bị xoá giữa các lần chạy và bạn đang sử dụng cấu hình kiểm thử cơ sở mới.
Nhập và xuất dữ liệu
Cơ sở dữ liệu và trình mô phỏng Cloud Storage for Firebase cho phép bạn xuất dữ liệu từ một thực thể trình mô phỏng đang chạy. Xác định một tập dữ liệu cơ sở để sử dụng trong các quy trình kiểm thử đơn vị hoặc quy trình tích hợp liên tục, sau đó xuất tập dữ liệu đó để chia sẻ với nhóm.
firebase emulators:export ./dir
Trong các chương trình kiểm thử, 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, bằng cách chỉ định đường dẫn xuất hoặc chỉ cần sử dụng đường dẫn được truyền đến cờ --import
.
firebase emulators:start --import=./dir --export-on-exit
Các tuỳ 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 thông tin, hãy tham khảo tài liệu tham khảo về lệnh trình mô phỏng.
Hình ảnh hoá hoạt động của Quy tắc bảo mật
Khi xử lý vòng lặp nguyên mẫu và kiểm thử, bạn có thể sử dụng các công cụ trực quan hoá và báo cáo do Local Emulator Suite cung cấp.
Sử dụng Trình theo dõi yêu cầu
Trình mô phỏng Cloud Firestore cho phép bạn hình dung các yêu cầu của ứng dụng trong Emulator Suite UI, bao gồm cả tính năng theo dõi đánh giá cho Firebase Security Rules.
Mở thẻ Firestore > Requests (Firestore > Yêu cầu) để xem trình tự đánh giá chi tiết cho từng yêu cầu.
Hình ảnh hoá 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, bạn có thể gỡ lỗi các quy tắc đó bằng các công cụ gỡ lỗi Local Emulator Suite.
Sau khi chạy một bộ kiểm thử, bạn có thể truy cập vào báo cáo phạm vi kiểm thử để biết cách đánh giá từng quy tắc bảo mật.
Để nhận báo cáo, hãy truy vấn một điểm cuối được hiển thị trên trình mô phỏng trong khi trình mô phỏng đang chạy. Đối với 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
Thao tác này sẽ 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 cả số lượt đá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 thêm 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 làm nổi bật các lượt đánh giá gửi lỗi không xác định và lỗi giá trị rỗng:
Sự khác biệt giữa trình mô phỏng Cloud Firestore và phiên bản phát hành công khai
Trình mô phỏng Cloud Firestore cố gắng sao chép một cách trung thực hành vi của dịch vụ phát hành chính thức, kèm theo một số hạn chế đáng chú ý.
Hỗ trợ nhiều cơ sở dữ liệu cho Cloud Firestore
Hiện tại, Emulator Suite UI hỗ trợ việc tạo, chỉnh sửa, xoá, giám sát yêu cầu và trực quan hoá tính bảo mật có tính tương tác cho một cơ sở dữ liệu mặc định, nhưng không hỗ trợ các cơ sở dữ liệu khác có tên.
Tuy nhiên, chính 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
và ngầm ẩn để phản hồi các lệnh gọi SDK hoặc API 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 đã thấy trong phiên bản chính thức. Khi bạn đang kiểm thử các tính năng liên quan đến nhiều thao tác ghi đồng thời vào một tài liệu, trình mô phỏng có thể bị chậm khi hoàn tất các yêu cầu ghi. Trong một số trường hợp, có thể mất đến 30 giây thì khoá mới được mở. Cân nhắc điều chỉnh thời gian chờ kiểm thử cho phù hợp (nếu cần).
Chỉ số
Trình mô phỏng không theo dõi các chỉ mục phức hợp mà sẽ thực thi mọi truy vấn hợp lệ. Hãy nhớ kiểm thử ứng dụng của bạn trên một thực thể Cloud Firestore thực để xác định những chỉ mục mà bạn cần.
Giới hạn
Trình mô phỏng không thực thi tất cả các giới hạn được thực thi trong phiên bản chính thức. Ví dụ: trình mô phỏng có thể cho phép các giao dịch mà dịch vụ sản xuất sẽ từ chối do quá lớn. Hãy đảm bảo bạn nắm rõ các giới hạn được ghi nhận và thiết kế ứng dụng của bạn để chủ động tránh các giới hạn đó.
Bước tiếp theo là gì?
- Để 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 tham khảo Danh sách phát hướng dẫn về 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 thử Quy tắc bảo mật và SDK thử nghiệm Firebase: Kiểm thử Quy tắc bảo mật (Firestore).
- Vì các hàm được kích hoạt là một phương thức tích hợp thông thường với Cloud Firestore, hãy tìm hiểu thêm về trình mô phỏng Cloud Functions for Firebase tại phần Chạy hàm cục bộ.