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 của bạn với trình mô phỏng Realtime Database, hãy đảm bảo rằng bạn nắm rõ quy trình Firebase Local Emulator Suite tổng thể, bạn cài đặt và định cấu hình Local Emulator Suite và xem lại các lệnh CLI của giao thức 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 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 lần chạy CLI firebase use trong thư mục đang hoạt động. Hoặc, bạn có thể chuyển cờ --project cho từng trình mô phỏng .

Local Emulator Suite hỗ trợ mô phỏng các dự án Firebase thực và 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 tế là dự án do bạn tạo và định cấu hình (rất có thể thông qua bảng điều khiển Firebase).

Các dự án thực tế 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, bộ nhớ nhóm, hàm hoặc bất kỳ tài nguyên nào khác mà bạn thiết lập cho Firebase đó dự án.

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 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ộ nhớ) nhóm, 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 nào. Các dự án này thường được truy cập 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ố demo-.

Khi làm việc với các dự án Firebase minh hoạ, các ứng dụng và mã của bạn sẽ tương tác với chỉ có thể sử dụng 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:

  • Thiết lập dễ dàng 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 ra những lệnh 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ợ ngoại tuyến tốt hơn vì không cần truy cập Internet để tải cấu hình SDK của bạn xuống.

Đo lường ứng dụng của bạn để trò chuyện với trình mô phỏng

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 Realtime Database 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 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 được kích hoạt bởi các sự kiện trong Cơ sở dữ liệu theo thời gian thực bằng trình mô phỏng. Khi trình mô phỏng Cơ sở dữ liệu theo thời gian thực và Cloud Functions cả hai cùng chạy, chúng sẽ tự động 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 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, mã dự án của bạn và cấu hình khác sẽ được đặt tự động khi gọi initializeApp.

Nếu bạn muốn mã Admin SDK kết nối với một trình mô phỏng dùng chung chạy trong trong một môi trường khác, bạn sẽ cần chỉ định cùng một mã dự án mà bạn đặt bằng cách sử dụ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 giá trị 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ử

Để 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 của trình mô phỏng.

Kotlin+KTX
// 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 việc xả dữ liệu đã hoàn tất hay 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ư vậy, bạn có thể sắp xếp trình tự kiểm thử và kích hoạt các hàm của mình 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 for Firebase cho phép bạn xuất dữ liệu qua một phiên bản trình mô phỏng đang chạy. Xác định bộ dữ liệu cơ sở để sử dụng trong kiểm thử đơn vị hoặc quy trình tích hợp liên tục, sau đó xuất dữ liệu đó để chia sẻ trong 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 hoặc chỉ đơn giản là sử dụng đường dẫn được truyền đến --import cờ.

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

Các tùy chọn nhập và xuất dữ liệu này 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 trình mô phỏng.

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

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

Trực quan hoá việc đá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 bằng Công cụ 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 mức độ sử dụng của kiểm thử cho thấy cách từng quy tắc của bạn được đánh giá. Để nhận báo cáo, hãy truy vấn điểm cuối trên trình mô phỏng trong khi trình mô phỏng đang chạy. Để có phiên bản thân thiện với trình duyệt, 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 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 số lần thực thi và giá trị bị trả lại. Đối với phiên bản JSON thô của dữ liệu này, hãy thêm URL sau vào trong truy vấn của bạn:

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

Tiếp theo là gì?