Tạo báo cáo thử nghiệm

Cloud Firestore và Cơ sở dữ liệu thời gian thực đều dựa trên các ngôn ngữ quy tắc ngắn gọn, mạnh mẽ được tạo riêng để quản lý kiểm soát truy cập và bảo mật thông tin. Tuy nhiên, khi các quy tắc ngày càng dài hơn và phức tạp hơn, bạn có thể cần một số trợ giúp để gỡ lỗi trong hành vi của chúng.

Trình mô phỏng Firebase bao gồm khả năng tạo báo cáo phạm vi quy tắc, do đó bạn có thể biết chính xác từng biểu thức con được đánh giá là gì khi bạn tái tạo lỗi. Các báo cáo cũng cung cấp thông tin về tần suất mỗi trường hợp thử nghiệm sử dụng một quy tắc, như các kỹ thuật "bao phủ đường truyền" truyền thống.

Tạo báo cáo

Sau khi chạy một bộ thử nghiệm, bạn có thể truy cập các báo cáo phạm vi thử nghiệm để 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 hiển thị 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, hãy sử dụng URL sau:

Cửa hàng đám mây

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

Cơ sở dữ liệu thời gian thực

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

Đ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 đưa URL sau vào truy vấn của bạn:

Cửa hàng đám mây

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

Cơ sở dữ liệu thời gian thực

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

Gỡ lỗi các quy tắc ví dụ

Để dễ dàng tạo báo cáo thử nghiệm, hãy sử dụng phần khởi động nhanh của trình mô phỏng có sẵn trên GitHub cho Cloud FirestoreCơ sở dữ liệu thời gian thực . Những bước bắt đầu nhanh này sẽ hướng dẫn bạn cách cài đặt và khởi chạy trình mô phỏng đúng cách, sau đó tạo các thử nghiệm mẫu từ một bộ quy tắc mẫu.

Hãy xem xét một ứng dụng mẫu sử dụng Cloud Firestore để đếm số lần người dùng nhấp vào nút. Ứng dụng sử dụng các quy tắc sau:

Cửa hàng đám mây

 service cloud.firestore {
   match /databases/{database}/documents {
     match /counters/{counter} {
       allow read;
       allow write: if request.resource.data.value == resource.data.value +1;
     }
   }
 }
 

Để gỡ lỗi trong các quy tắc hiển thị ở trên, hãy sử dụng thử nghiệm JavaScript mẫu sau:

const counter0 = db.collection("counters").doc("0");
await firebase.assertSucceeds(counter0.set({value: 0}));

Trình mô phỏng tạo báo cáo có sẵn tại URL được ghi chú ở trên:

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

Báo cáo hiển thị các lỗi không xác định và có giá trị null sau:

Vấn đề với ví dụ cụ thể này là các quy tắc không phân biệt giữa việc tạo tài liệu và cập nhật tài liệu. Do đó, việc ghi không được phép nếu tài liệu không tồn tại và không thể tạo tài liệu vì nó không tồn tại. Việc phân biệt thao tác "ghi" thành hai thao tác cụ thể hơn — "tạo" và "cập nhật" — sẽ giải quyết được vấn đề.

Cửa hàng đám mây

 service cloud.firestore {
   match /databases/{database}/documents {
     match /counters/{counter} {
       allow read;
       allow create: if request.resource.data.value == 0;
       allow update: if request.resource.data.value == resource.data.value +1;
     }
   }
 }
 

Báo cáo được tạo cho biết tần suất sử dụng từng quy tắc và nội dung nào được trả về.