Kết nối ứng dụng của bạn với Trình mô phỏng cơ sở dữ liệu theo thời gian thực

Trước khi kết nối ứng dụng với trình mô phỏng Realtime Database, hãy đảm bảo rằng bạn hiểu quy trình tổng thể của Firebase Local Emulator Suite workflow, đồng thời 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 bộ 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 cần 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 làm việc. Hoặc bạn có thể truyền cờ --project cho mỗi lệnh trình mô phỏng command.

Local Emulator Suite hỗ trợ mô phỏng các dự án Firebase thực và các dự án bản trình diễn.

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ể thông qua Firebase bảng điều khiển).

Các 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, 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 mà 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ữ, hàm, v.v.).

Bản trình diễn

Dự án Firebase bản trình diễn 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 codelab hoặc các hướng dẫn khác.

Mã dự án cho các dự án bản trình diễn có tiền tố demo-.

Khi làm việc với các dự án Firebase bản trình diễn, ứng dụng và mã của bạn tương tác với trình mô phỏng chỉ. 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 bản trình diễn bất cứ khi nào có thể. Các lợi ích bao gồm:

  • Dễ dàng 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
  • 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ó khả năng thay đổi dữ liệu, mức sử dụng và hoá đơn
  • Hỗ trợ ngoại tuyến tốt 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 để giao tiếp với trình mô phỏng

SDK cho Android, nền tảng Apple và 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 Realtime Database như sau.

Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val database = Firebase.database
database.useEmulator("10.0.2.2", 9000)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseDatabase database = FirebaseDatabase.getInstance();
database.useEmulator("10.0.2.2", 9000);
Swift
    // In almost all cases the ns (namespace) is your project ID.
let db = Database.database(url:"http://127.0.0.1:9000?ns=YOUR_DATABASE_NAMESPACE")

Web

import { getDatabase, connectDatabaseEmulator } from "firebase/database";

const db = getDatabase();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  connectDatabaseEmulator(db, "127.0.0.1", 9000);
} 

Web

var db = firebase.database();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  db.useEmulator("127.0.0.1", 9000);
} 

Bạn không cần thiết lập thêm để kiểm thử Cloud Functions do các sự kiện Cơ sở dữ liệu theo thời gian thực kích hoạt bằng trình mô phỏng. Khi cả trình mô phỏng Cơ sở dữ liệu theo thời gian thực và Cloud Functions đều đang chạy, chúng sẽ tự động hoạt động cùng nhau.

Admin SDKs

Các Firebase Admin SDK sẽ tự động kết nối với trình mô phỏng Realtime Database khi biến môi trường FIREBASE_DATABASE_EMULATOR_HOST được đặt:

export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"

Nếu mã của bạn đang chạy bên trong trình mô phỏng Cloud Functions, thì mã 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 đang 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 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 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 bài kiểm thử

Để xoá Realtime Database giữa các hoạt động, bạn có thể xoá tham chiếu cơ sở dữ liệu. 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.

Kotlin
// With a DatabaseReference, write null to clear the database.
database.reference.setValue(null)
Java
// With a DatabaseReference, write null to clear the database.
database.getReference().setValue(null);
Swift
// With a DatabaseReference, write nil to clear the database.
    Database.database().reference().setValue(nil);

Web

import { getDatabase, ref, set } from "firebase/database";

// With a database Reference, write null to clear the database.
const db = getDatabase();
set(ref(db), null);

Web

// With a database Reference, write null to clear the database.
firebase.database().ref().set(null);

Đương nhiên, mã của bạn phải chờ xác nhận rằng quá trình xoá đã hoàn tất hoặc không thành công bằng cách sử dụng các tính năng xử lý sự kiện không đồng bộ của nền tảng.

Sau khi triển khai một bước như thế này, bạn có thể sắp xếp các bài kiểm thử theo trình tự 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

Trình mô phỏng cơ sở dữ liệu và Cloud Storage for 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 một tập hợp dữ liệu cơ sở để 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 hợp dữ liệu đó để chia sẻ giữa các thành viên trong nhóm.

firebase emulators:export ./dir

Trong các bài 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, 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 .

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

Khi thực hiện các vòng lặp kiểm thử và tạo nguyên mẫu, bạn có thể sử dụng các công cụ và báo cáo trực quan hoá do Local Emulator Suite cung cấp.

Trực quan hoá quá trình đá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 Local Emulator Suite công cụ.

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 mức độ kiểm thử cho thấy cách đánh giá từng quy tắc. Để 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 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:9000/.inspect/coverage?ns=<database_name>

Thao tác này sẽ chia các quy tắc thành các biểu thức và biểu thức con mà bạn có thể di chuột lên để biết thêm thông tin, bao gồm cả số lần thực thi và các giá trị được trả về. Để có phiên bản JSON thô của dữ liệu này, hãy đưa URL sau vào truy vấn:

http://localhost:9000/.inspect/coverage.json?ns=<database_name>

Bước tiếp theo là gì?