Kết nối ứng dụng với Trình mô phỏng Cloud Firestore

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 rõ quy trình làm việc tổng thể của Bộ trình mô phỏng cục bộ Firebase và bạn đã cài đặt cũng như định cấu hình Bộ trình mô phỏng cục bộ, đồng thời xem lại các lệnh CLI của bộ công cụ đó.

Chọn một dự án Firebase

Bộ trình mô phỏng cục bộ của 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 mô phỏng, trong CLI, hãy chạy firebase use ở thư mục đang làm việc. Bạn cũng có thể chuyển cờ --project đến từng lệnh của trình mô phỏng.

Bộ trình mô phỏng cục bộ hỗ trợ mô phỏng các dự án Firebase thực và dự án bản minh hoạ.

Loại dự án Tính năng Dùng với trình mô phỏng
Thực

Một dự án Firebase thực tế 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 của Firebase).

Dự án thực tế có tài nguyên trực tiếp, chẳng hạn như thực thể cơ sở dữ liệu, bộ chứa 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 tế, bạn có thể chạy trình mô phỏng cho bất kỳ hoặc tất 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, các ứ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ữ, hàm, v.v.).

Bản minh hoạ

Một dự án Firebase minh hoạ không có cấu hình Firebase thực và không có tài nguyên đang hoạt động. Người dùng thường truy cập được những dự án này thông qua 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ố demo-.

Khi thao tá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
  • Tăng mức độ an toà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à việc tính phí
  • Hỗ trợ ngoại tuyến hiệu quả hơn vì bạn không cần truy cập vào Internet để tải cấu hình SDK xuống.

Đo lường ứng dụng của bạn để trao đổi 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à cơ sở dữ liệu đã đặt tên cho mỗi cấu hình firestore trong tệp firebase.json của bạn.

Các cơ sở dữ liệu đã đặ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ể. Những cơ sở dữ liệu được tạo ngầm như vậy sẽ hoạt động với các quy tắc mở.

Để tương tác với cơ sở dữ liệu mặc định và cơ sở dữ liệu đã đặt tên trong giao diện người dùng Bộ mô phỏng, 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 qua 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 qua trong một thực thể có tên ecommerce, hãy cập nhật lên localhost:4000/firestore/ecommerce/data.

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 thử để 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. Để xem các ví dụ liên quan đến các cơ sở dữ liệu Cloud Firestore khác 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

API mô-đun web

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

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

API được đặt tên trong vùng chứa tên của 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ử Chức năng đám mây do các sự kiện Firestore kích hoạt bằng trình mô phỏng. Khi trình mô phỏng Firestore và Cloud Functions đang chạy, chúng sẽ tự động hoạt động cùng nhau.

SDK dành cho quản trị viên

SDK dành cho quản trị viên của 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ã đang chạy bên trong trình mô phỏng Cloud Functions, thì mã dự án và cấu hình khác của bạn sẽ được tự động đặt khi gọi initializeApp.

Nếu muốn mã SDK dành cho quản trị viên 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 cách sử dụng Firebase CLI. 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 quản trị 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ử

Bản phát hành chính thức Firestore không cung cấp phương thức SDK nền tảng để đẩy 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. Điểm cuối này có thể được gọi từ bước thiết lập khung kiểm thử/bướctredDown, từ lớp kiểm thử hoặc từ shell (ví dụ: bằng 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ỉ cần tắt quy trình của trình mô phỏng.

Trong một phương thức thích hợp, hãy thực hiện thao tác DELETE HTTP, cung cấp projectID của Firebase (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 là mã của bạn sẽ phải chờ REST xác nhận rằng quá trình 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 một bước như thế này, bạn có thể sắp xếp trình tự các bài kiểm thử và kích hoạt các hàm một cách tự tin rằng dữ liệu cũ sẽ bị xoá hoàn toàn 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 cho 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 tập dữ liệu cơ sở để dùng trong các bài 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ẻ cho nhóm.

firebase emulators:export ./dir

Trong 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, chỉ định đường dẫn xuất hoặc đơn giản là 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.

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

Khi thực hiện 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 Bộ mô phỏng cục bộ cung cấp.

Sử dụng Giám sát yêu cầu

Trình mô phỏng Cloud Firestore cho phép bạn trực quan hoá các yêu cầu của ứng dụng trong giao diện người dùng của Bộ trình mô phỏng, bao gồm cả hoạt động theo dõi hoạt động đánh giá theo Quy tắc bảo mật của Firebase.

Mở thẻ Firestore > Yêu cầu để xem trình tự đánh giá chi tiết cho từng yêu cầu.

Giám sát yêu cầu của Trình mô phỏng Firestore hiển thị phần đánh giá các quy tắc bảo mật

Trực quan 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 của mình, bạn có thể gỡ lỗi các quy tắc này bằng công cụ gỡ lỗi Bộ mô phỏng cục bộ.

Sau khi chạy một bộ kiểm thử, bạn có thể truy cập vào các báo cáo về phạm vi kiểm thử cho biết cách từng quy tắc bảo mật được đánh giá.

Để nhận báo cáo, hãy truy vấn một điểm cuối bị lộ trên trình mô phỏng khi trình mô phỏng đang chạy. Để xem một phiên bản thân thiện với trình duyệt, hãy dùng URL sau:

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

Thao tác 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 phụ mà bạn có thể di chuột qua để biết thêm thông tin, bao gồm cả 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 làm nổi bật những đánh giá gửi ra lỗi không xác định và có giá trị rỗng:

Điểm khác biệt giữa trình mô phỏng Cloud Firestore và bản phát hành chính thức

Trình mô phỏng Cloud Firestore cố gắng sao chép trung thực hành vi của dịch vụ phát hành chính thức 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 của Emulator Suite hỗ trợ tính năng tạo, chỉnh sửa, xoá, theo dõi yêu cầu và trực quan hoá bảo mật cho cơ sở dữ liệu mặc định, nhưng không hỗ trợ việc tạo thêm các cơ sở dữ liệu có tên.

Tuy nhiên, trình mô phỏng sẽ tự tạo một cơ sở dữ liệu có tên dựa trên cấu hình trong tệp firebase.json 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 phát hiện 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 lượt ghi đồng thời vào một tài liệu, trình mô phỏng có thể bị chậm để 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 mở ra. Hãy 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 chỉ mục bạn sẽ 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 áp dụng cho 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 bị dịch vụ sản xuất từ chối vì có quy mô quá lớn. Hãy đảm bảo bạn đã nắm rõ các giới hạn trong tài liệu và rằng bạn thiết kế ứng dụng để chủ động tránh các giới hạn đó.

Tiếp theo sẽ là gì?