Catch up on highlights from Firebase at Google I/O 2023. Learn more

Kết nối ứng dụng của bạn với Trình giả lập Cloud Firestore

Trước khi kết nối ứng dụng của bạn với trình giả lập 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 Bộ giả lập cục bộ Firebase và bạn cài đặt cũng như định cấu hình Bộ giả lập cục bộ cũng như xem lại các lệnh CLI của nó.

Chọn một dự án Firebase

Bộ giả lập cục bộ Firebase mô phỏng các sản phẩm cho một dự án Firebase duy nhất.

Để chọn dự án sẽ sử dụng, trước khi bạn khởi động trình giả lập, trong CLI 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 từng lệnh giả lập.

Bộ giả lập cục bộ 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 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).

Dự án thực có tài nguyên trực tiếp, chẳng hạn như phiên bản cơ sở dữ liệu, bộ chứa lưu trữ, chức năng 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 giả lập 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, bộ chứa 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 phòng thí nghiệm 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ố demo- .

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 giả lập . 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 giả lập 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 (sản xuất) không được mô phỏng, thì sẽ không có khả năng thay đổi dữ liệu, cách 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.

Cung cấp ứng dụng của bạn để nói chuyện với trình giả lập

Nền tảng Android, Apple và Web SDK

Thiết lập lớp cấu hình hoặc thử nghiệm trong ứng dụng của bạn để tương tác với Cloud Firestore như sau.

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 = "localhost:8080"
settings.isPersistenceEnabled = false 
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Web version 9

import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, 'localhost', 8080);

Web version 8

// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 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 giả lập Firestore và Cloud Function đều đang 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 giả lập Cloud Firestore khi biến môi trường FIRESTORE_EMULATOR_HOST được đặt:

export FIRESTORE_EMULATOR_HOST="localhost:8080"

Nếu mã của bạn đang chạy bên trong trình giả lập Chức năng đám mây, ID dự án của bạn và cấu hình khác sẽ được đặt tự động khi gọi initalizeApp .

Nếu bạn muốn mã SDK quản trị của mình kết nối với trình mô phỏng được chia sẻ đang chạy trong một môi trường khác, bạn sẽ cần chỉ định cùng một ID dự án mà bạn đã đặt bằng Firebase CLI . Bạn có thể chuyển trực tiếp ID dự án để 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 giả lập Firestore cung cấp cho bạn một điểm cuối REST dành riêng cho mục đích này, điểm cuối này có thể được gọi từ bước thiết lập/tearDown khung thử nghiệm, từ lớp thử nghiệm hoặc từ trình bao (ví dụ: , với curl ) trước khi thử nghiệm 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 giả lập.

Bằng 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, 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 của REST rằng quá trình tuôn ra đã kết thúc hoặc không thành công.

Bạn có thể thực hiện thao tác này từ trình bao:

// 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 trình tự các thử nghiệm và kích hoạt các chức năng của mình với niềm tin rằng dữ liệu cũ sẽ được 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ơ sở mới.

Nhập và xuất dữ liệu

Cơ sở dữ liệu và Bộ nhớ đám mây dành cho trình giả lập Firebase cho phép bạn xuất dữ liệu từ phiên bản trình giả lập đ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 các nhóm.

firebase emulators:export ./dir

Trong các thử nghiệm, khi khởi động trình giả lập, hãy nhập dữ liệu cơ sở.

firebase emulators:start --import=./dir

Bạn có thể hướng dẫn trình giả lập xuất dữ liệu khi tắt máy, chỉ định đường dẫn xuất hoặc chỉ cần 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 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 giả lập .

Trực quan hóa hoạt động Quy tắc bảo mật

Khi bạn làm việc qua các vòng lặp thử nghiệm và nguyên mẫu, bạn có thể sử dụng các công cụ trực quan và báo cáo do Bộ giả lập cục bộ cung cấp.

Sử dụng màn hình yêu cầu

Trình giả lập Cloud Firestore cho phép bạn trực quan hóa các yêu cầu của ứng dụng khách trong Giao diện người dùng Bộ giả lập, bao gồm 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.

Màn hình yêu cầu trình giả lập Firestore hiển thị đánh giá Quy tắc bảo mật

Trực quan hóa báo cáo đánh giá Quy tắc

Khi bạn 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 của Bộ giả lập cục bộ.

Sau khi chạy một bộ kiểm tra, bạn có thể truy cập báo cáo phạm vi kiểm tra cho 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 được hiển thị trên trình giả lập trong khi trình giả lập đ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

Đ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 bao gồm URL sau trong truy vấn của bạn:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage

Tại đây, phiên bản HTML của báo cáo nêu bật các đánh giá gây ra lỗi không xác định và giá trị null:

Trình giả lập Cloud Firestore khác với sản xuất như thế nào

Trình giả lập Cloud Firestore cố gắng sao chép 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ú ý.

giao dịch

Trình giả lập hiện không triển khai tất cả hành vi giao dịch được thấy trong sản xuất. Khi bạn đang thử nghiệm các tính năng bao gồm nhiều thao tác ghi đồng thời vào một tài liệu, trình mô phỏng có thể chậm hoàn thành các yêu cầu ghi. Trong một số trường hợp, khóa có thể mất tới 30 giây để mở. Cân nhắ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 giả lập không theo dõi các chỉ mục phức hợp và thay vào đó sẽ thực hiện 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 bạn sẽ cần chỉ mục nào.

Hạn mức

Trình giả lập 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 sẽ bị dịch vụ sản xuất từ ​​chối do quá lớn. Đảm bảo rằng bạn đã quen thuộc với các giới hạn được lập thành văn bản và bạn thiết kế ứng dụng của mình để chủ động tránh các giới hạn đó.

Tiếp theo là gì?