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 để mô phỏng đám mây FireStore, hãy chắc chắn rằng bạn hiểu được công việc tổng thể căn cứ hỏa lực địa phương Emulator Suite , và rằng bạn cài đặt và cấu hình các địa phương Emulator Suite và xem xét nó lệnh CLI .

Chọn một 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 duy nhất.

Để chọn dự án để sử dụng, trước khi bạn bắt đầu giả lập, trong CLI chạy firebase use trong thư mục làm việc của bạn. Hoặc, bạn có thể vượt qua --project cờ cho mỗi lệnh giả lập.

Địa phương Emulator Suite hỗ trợ thi đua của các dự án căn cứ hỏa lực thựcdemo dự án.

Loại dự án Đặc trưng Sử dụng với trình giả lập
Thực

Dự án Firebase thực là dự án 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ó các tài nguyên trực tiếp, chẳng hạn như các phiên bản cơ sở dữ liệu, nhóm 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 bạn không mô phỏng, ứng dụng và mã của bạn sẽ tương tác với các tài nguyên sống (ví dụ cơ sở dữ liệu, lưu trữ xô, chức năng, vv).

Bản giới thiệu

Một dự án căn cứ hỏa lực bản demo không có cấu hình căn cứ hỏa lực thực tế và không có tài nguyên sống. Các dự án này thường được truy cập thông qua codelabs hoặc các hướng dẫn khác.

Dự án ID cho bản demo dự án có demo- tiền tố.

Khi làm việc với bản demo dự án căn cứ hỏa lực, ứng dụng của bạn và tương tác mã với chỉ 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 giả lập 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 không được mô phỏng (sản xuất), 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.

Tạo công cụ cho ứ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à SDK web

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

Android
        // 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

Phiên bản web 9

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

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

Phiên bản web 8

// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 8080);
}

Không cài đặt bổ sung là cần thiết để kiểm tra Mây Chức năng kích hoạt bởi sự kiện FireStore sử dụng giả lập. Khi trình giả lập Firestore và Cloud Functions đều đang chạy, chúng sẽ tự động hoạt động cùng nhau.

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

Các căn cứ hỏa lực quản lý SDK tự động kết nối với các mô phỏng đám mây FireStore khi FIRESTORE_EMULATOR_HOST biến môi trường được thiết lập:

export FIRESTORE_EMULATOR_HOST="localhost:8080"

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

Khi kết nối với trình giả lập Cloud Firestore từ bất kỳ môi trường nào khác, bạn sẽ cần chỉ định ID dự án. Bạn có thể vượt qua một ID dự án để initializeApp trực tiếp hoặc đặt GCLOUD_PROJECT biến môi trường. Lưu ý rằng bạn không cần sử dụng ID dự án Firebase thực của mình; emulator Mây FireStore sẽ chấp nhận bất kỳ ID dự án, miễn là nó có một định dạng hợp lệ .

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

Sản xuất Firestore không cung cấp phương pháp SDK nền tảng nào để 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 đặc biệt cho mục đích này, có thể được gọi từ bước thiết lập khung thử nghiệm / drawDown, từ lớp thử nghiệm hoặc từ trình bao (ví dụ: , với curl ) trước khi kiểm tra được khởi công. Bạn có thể sử dụng phương pháp này để thay thế cho việc tắt quá trình giả lập một cách đơn giản.

Trong một phương pháp thích hợp, thực hiện một hoạt động DELETE HTTP, cung cấp căn cứ hỏa lực projectID của bạn, ví dụ firestore-emulator-example , đến thiết bị đầu cuối như 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 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 thực hiện một bước như thế này, bạn có thể 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 sự tự 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à trình giả lập Cloud Storage cho phép bạn xuất dữ liệu từ phiên bản giả lập đang chạy. Xác định tập hợp dữ liệu cơ sở để sử dụng trong các bài kiểm tra đơn vị của bạn hoặc quy trình làm việc tích hợp liên tục, sau đó xuất nó để 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 giả lập để xuất dữ liệu trên tắt máy, hoặc chỉ định một con đường xuất khẩu hoặc đơn giản là sử dụng đường truyền cho --import cờ.

firebase emulators:start --import=./dir --export-on-exit

Các tùy chọn nhập dữ liệu và xuất khẩu làm việc với các firebase emulators:exec lệnh là tốt. Để biết thêm, tham khảo các tài liệu tham khảo 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 thông 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 hóa 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 giả lập 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 của Emulator Suite, bao gồm cả việc theo dõi đánh giá đối với Quy tắc bảo mật của Firebase.

Mở FireStore> tab Các yêu cầu để xem trình tự đánh giá chi tiết cho mỗi 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 các 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 Local Emulator Suite.

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

Để nhận báo cáo, hãy truy vấn một điểm cuối được tiếp xúc trên trình giả lập khi nó đ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 phá vỡ 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

Ở đâ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ị rỗng:

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 giả lập Cloud Firestore cố gắng tái tạo 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ả các hành vi giao dịch được thấy trong quá trình sản xuất. Khi bạn đang thử nghiệm các tính năng liên quan đến nhiều lần ghi đồng thời vào một tài liệu, trình giả lập có thể chậm hoàn thành các yêu cầu ghi. Trong một số trường hợp, có thể mất tới 30 giây để mở khóa. 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 với phiên bản Cloud Firestore thực để xác định chỉ mục nào bạn sẽ cần.

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 giả lập 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. Hãy chắc chắn rằng bạn đã quen thuộc với giới hạn tài liệu và rằng bạn thiết kế ứng dụng của bạn để chủ động phòng tránh.

Tiếp theo là gì?