Tạo báo cáo kiểm thử

Cloud FirestoreRealtime Database đều dựa vào ngôn ngữ quy tắc mạnh mẽ, súc tích được tạo riêng để quản lý việc kiểm soát quyền truy cập và bảo mật thông tin. Tuy nhiên, khi quy tắc trở nên 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 họ.

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

Tạo báo cáo

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 phạm vi kiểm thử cho biết cách đánh giá từng quy tắc bảo mật.

Để 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 trong khi trình mô phỏng đ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:

Cloud Firestore

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

Realtime Database

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 con mà bạn có thể di chuột qua để biết thêm thông tin, bao gồm cả số lượt đá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 thêm URL sau trong truy vấn của bạn:

Cloud Firestore

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

Realtime Database

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

Quy tắc ví dụ về gỡ lỗi

Để dễ dàng tạo báo cáo kiểm thử, hãy sử dụng tính năng bắt đầu nhanh trình mô phỏng có trên GitHub cho Cloud FirestoreRealtime Database. Các hướng dẫn bắt đầu nhanh này hướng dẫn bạn cách cài đặt đúng cách và khởi chạy trình mô phỏng, sau đó tạo chương trình kiểm thử mẫu từ một ví dụ bộ quy tắc.

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

Cloud Firestore

 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 ở trên, hãy sử dụng mẫu sau Kiểm tra JavaScript:

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

Trình mô phỏng tạo một báo cáo có sẵn tại URL đã nêu ở trên:

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

Báo cáo cho thấy các lỗi không xác định và có giá trị rỗng sau đây:

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 đó, không được phép ghi nếu tài liệu không tồn tại và tài liệu không được được tạo vì nó không tồn tại. Phân biệt chữ "viết" thành hai thao tác cụ thể hơn — "tạo" và "cập nhật" — giải quyết vấn đề đó.

Cloud Firestore

 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 đã tạo cho biết tần suất từng quy tắc được sử dụng và nội dung bị trả lại.