Firebase Local Emulator Suite giúp bạn dễ dàng xác thực đầy đủ các tính năng và hành vi của ứng dụng. Đây cũng là một công cụ tuyệt vời để xác minh cấu hình Firebase Security Rules. Sử dụng Trình mô phỏng Firebase để chạy và tự động hoá kiểm thử đơn vị trong môi trường cục bộ. Các phương thức được nêu trong tài liệu này sẽ giúp bạn khi tạo và tự động hoá các chương trình kiểm thử đơn vị cho ứng dụng xác thực Rules.
Thiết lập Trình mô phỏng Firebase nếu bạn chưa thiết lập.
Trước khi chạy trình mô phỏng
Trước khi bắt đầu sử dụng trình mô phỏng, hãy lưu ý những điều sau:
- Ban đầu, trình mô phỏng sẽ tải các quy tắc được chỉ định trong trường
firestore.rules
hoặc "storage.rules" của tệpfirebase.json
. Nếu tệp không tồn tại và bạn không sử dụng phương thứcloadFirestoreRules
hoặc "loadStorageRules" như mô tả bên dưới, thì trình mô phỏng sẽ coi tất cả dự án đều có quy tắc mở. - Mặc dù hầu hết SDK Firebase hoạt động trực tiếp với trình mô phỏng, nhưng chỉ thư viện
@firebase/rules-unit-testing
mới hỗ trợ mô phỏngauth
trong Quy tắc bảo mật, giúp kiểm thử đơn vị dễ dàng hơn nhiều. Ngoài ra, thư viện này còn hỗ trợ một số tính năng dành riêng cho trình mô phỏng như xoá tất cả dữ liệu, như được liệt kê bên dưới. - Trình mô phỏng cũng sẽ chấp nhận mã thông báo xác thực Firebase chính thức được cung cấp thông qua SDK ứng dụng và đánh giá các quy tắc cho phù hợp, cho phép kết nối trực tiếp ứng dụng của bạn với trình mô phỏng trong quá trình tích hợp và kiểm thử thủ công.
Sự khác biệt giữa trình mô phỏng cơ sở dữ liệu và bản phát hành chính thức
- Bạn không cần phải tạo một thực thể cơ sở dữ liệu một cách rõ ràng. Trình mô phỏng sẽ tự động tạo mọi thực thể cơ sở dữ liệu được truy cập.
- Mỗi cơ sở dữ liệu mới được bắt đầu bằng các quy tắc đóng, vì vậy, người dùng không phải quản trị viên sẽ không thể đọc hoặc ghi.
- Mỗi cơ sở dữ liệu được mô phỏng sẽ áp dụng các giới hạn và hạn mức của gói Spark (đáng chú ý nhất là giới hạn mỗi thực thể ở mức 100 kết nối đồng thời).
- Mọi cơ sở dữ liệu đều chấp nhận chuỗi
"owner"
làm mã thông báo xác thực quản trị. - Các trình mô phỏng hiện không có hoạt động tương tác với các sản phẩm Firebase khác. Đáng chú ý là quy trình Xác thực Firebase thông thường không hoạt động.
Thay vào đó, bạn có thể sử dụng phương thức
initializeTestApp()
trong thư việnrules-unit-testing
. Phương thức này sẽ lấy trườngauth
. Đối tượng Firebase được tạo bằng phương thức này hoạt động như thể đã xác thực thành công dưới dạng bất kỳ thực thể nào mà bạn cung cấp. Nếu bạn truyền vàonull
, thì giá trị này sẽ hoạt động như một người dùng chưa xác thực (ví dụ: các quy tắcauth != null
sẽ không thành công).
Tương tác với trình mô phỏng Realtime Database
Bạn có thể truy cập vào một thực thể Realtime Database Firebase chính thức tại một miền con của firebaseio.com
và bạn có thể truy cập vào API REST như sau:
https://<database_name>.firebaseio.com/path/to/my/data.json
Trình mô phỏng chạy cục bộ và có tại localhost:9000
. Để tương tác với một thực thể cơ sở dữ liệu cụ thể, bạn sẽ phải sử dụng tham số truy vấn ns
để chỉ định tên cơ sở dữ liệu.
http://localhost:9000/path/to/my/data.json?ns=<database_name>
Chạy kiểm thử đơn vị cục bộ bằng SDK JavaScript phiên bản 9
Firebase phân phối thư viện kiểm thử đơn vị Quy tắc bảo mật bằng cả SDK JavaScript phiên bản 9 và SDK phiên bản 8. Các API thư viện khác nhau đáng kể. Bạn nên sử dụng thư viện kiểm thử v9, thư viện này được tinh giản hơn và yêu cầu ít thiết lập hơn để kết nối với trình mô phỏng, nhờ đó tránh được việc vô tình sử dụng tài nguyên sản xuất một cách an toàn. Để đảm bảo khả năng tương thích ngược, chúng tôi tiếp tục cung cấp thư viện kiểm thử v8.
- Các phương thức kiểm thử và hàm tiện ích phổ biến trong SDK phiên bản 9
- Các phương thức kiểm thử dành riêng cho trình mô phỏng trong SDK phiên bản 9
Sử dụng mô-đun @firebase/rules-unit-testing
để tương tác với trình mô phỏng chạy cục bộ. Nếu bạn gặp lỗi hết thời gian chờ hoặc ECONNREFUSED
, hãy kiểm tra kỹ để đảm bảo trình mô phỏng đang chạy.
Bạn nên sử dụng phiên bản Node.js mới để có thể sử dụng ký hiệu async/await
. Hầu hết hành vi mà bạn có thể muốn kiểm thử đều liên quan đến các hàm không đồng bộ và mô-đun kiểm thử được thiết kế để hoạt động với mã dựa trên Lời hứa.
Thư viện Kiểm thử đơn vị theo quy tắc v9 luôn nhận biết được trình mô phỏng và không bao giờ chạm vào tài nguyên sản xuất của bạn.
Bạn nhập thư viện bằng cách sử dụng câu lệnh nhập mô-đun v9. Ví dụ:
import {
assertFails,
assertSucceeds,
initializeTestEnvironment
} from "@firebase/rules-unit-testing"
// Use `const { … } = require("@firebase/rules-unit-testing")` if imports are not supported
// Or we suggest `const testing = require("@firebase/rules-unit-testing")` if necessary.
Sau khi nhập, việc triển khai kiểm thử đơn vị sẽ bao gồm:
- Tạo và định cấu hình
RulesTestEnvironment
bằng lệnh gọi đếninitializeTestEnvironment
. - Thiết lập dữ liệu kiểm thử mà không kích hoạt Rules, sử dụng một phương thức thuận tiện cho phép bạn tạm thời bỏ qua các dữ liệu đó,
RulesTestEnvironment.withSecurityRulesDisabled
. - Thiết lập bộ kiểm thử và mỗi hàm trước/sau kiểm thử bằng các lệnh gọi để dọn dẹp dữ liệu và môi trường kiểm thử, chẳng hạn như
RulesTestEnvironment.cleanup()
hoặcRulesTestEnvironment.clearFirestore()
. - Triển khai các trường hợp kiểm thử mô phỏng trạng thái xác thực bằng cách sử dụng
RulesTestEnvironment.authenticatedContext
vàRulesTestEnvironment.unauthenticatedContext
.
Các phương thức và hàm tiện ích phổ biến
Ngoài ra, hãy xem các phương thức kiểm thử dành riêng cho trình mô phỏng bằng API mô-đun.
initializeTestEnvironment() => RulesTestEnvironment
Hàm này khởi chạy môi trường kiểm thử cho quy tắc kiểm thử đơn vị. Trước tiên, hãy gọi hàm này để thiết lập kiểm thử. Để thực thi thành công, bạn cần chạy trình mô phỏng.
Hàm này chấp nhận một đối tượng không bắt buộc xác định TestEnvironmentConfig
, có thể bao gồm mã dự án và chế độ cài đặt cấu hình trình mô phỏng.
let testEnv = await initializeTestEnvironment({ projectId: "demo-project-1234", firestore: { rules: fs.readFileSync("firestore.rules", "utf8"), }, });
RulesTestEnvironment.authenticatedContext({ user_id: string, tokenOptions?: TokenOptions }) => RulesTestContext
Phương thức này tạo một RulesTestContext
, hoạt động như một người dùng Authentication đã xác thực. Các yêu cầu được tạo thông qua ngữ cảnh được trả về sẽ có mã thông báo Authentication mô phỏng được đính kèm. Bạn có thể tuỳ ý truyền một đối tượng xác định các thông báo xác nhận tuỳ chỉnh hoặc ghi đè cho tải trọng mã thông báo Authentication.
Sử dụng đối tượng ngữ cảnh kiểm thử được trả về trong các chương trình kiểm thử để truy cập vào mọi thực thể trình mô phỏng đã định cấu hình, bao gồm cả các thực thể được định cấu hình bằng initializeTestEnvironment
.
// Assuming a Firestore app and the Firestore emulator for this example import { setDoc } from "firebase/firestore"; const alice = testEnv.authenticatedContext("alice", { … }); // Use the Firestore instance associated with this context await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });
RulesTestEnvironment.unauthenticatedContext() => RulesTestContext
Phương thức này tạo một RulesTestContext
, hoạt động như một ứng dụng không đăng nhập qua Authentication. Các yêu cầu được tạo thông qua ngữ cảnh được trả về sẽ không có mã thông báo xác thực Firebase được đính kèm.
Sử dụng đối tượng ngữ cảnh kiểm thử được trả về trong các chương trình kiểm thử để truy cập vào mọi thực thể trình mô phỏng đã định cấu hình, bao gồm cả các thực thể được định cấu hình bằng initializeTestEnvironment
.
// Assuming a Cloud Storage app and the Storage emulator for this example import { getStorage, ref, deleteObject } from "firebase/storage"; const alice = testEnv.unauthenticatedContext(); // Use the Cloud Storage instance associated with this context const desertRef = ref(alice.storage(), 'images/desert.jpg'); await assertSucceeds(deleteObject(desertRef));
RulesTestEnvironment.withSecurityRulesDisabled()
Chạy một hàm thiết lập kiểm thử với ngữ cảnh hoạt động như thể Quy tắc bảo mật bị tắt.
Phương thức này lấy một hàm gọi lại, hàm này lấy ngữ cảnh Security-Rules-bypassing và trả về một lời hứa. Ngữ cảnh sẽ bị huỷ sau khi lời hứa giải quyết / từ chối.
RulesTestEnvironment.cleanup()
Phương thức này huỷ bỏ tất cả RulesTestContexts
được tạo trong môi trường kiểm thử và dọn dẹp các tài nguyên cơ bản, cho phép thoát sạch.
Phương thức này không làm thay đổi trạng thái của trình mô phỏng theo bất kỳ cách nào. Để đặt lại dữ liệu giữa các lần kiểm thử, hãy sử dụng phương thức xoá dữ liệu dành riêng cho trình mô phỏng ứng dụng.
assertSucceeds(pr: Promise<any>)) => Promise<any>
Đây là hàm tiện ích của trường hợp kiểm thử.
Hàm này xác nhận rằng Lời hứa được cung cấp bao gồm một thao tác của trình mô phỏng sẽ được giải quyết mà không có lỗi vi phạm Quy tắc bảo mật.
await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });
assertFails(pr: Promise<any>)) => Promise<any>
Đây là hàm tiện ích của trường hợp kiểm thử.
Hàm này xác nhận rằng Lời hứa được cung cấp bao gồm một thao tác của trình mô phỏng sẽ bị từ chối do vi phạm Quy tắc bảo mật.
await assertFails(setDoc(alice.firestore(), '/users/bob'), { ... });
Phương thức dành riêng cho trình mô phỏng
Ngoài ra, hãy xem các phương thức kiểm thử phổ biến và hàm tiện ích sử dụng API mô-đun.
Cloud Firestore
Cloud Firestore
RulesTestEnvironment.clearFirestore() => Promise<void>
Phương thức này xoá dữ liệu trong cơ sở dữ liệu Firestore thuộc về projectId
được định cấu hình cho trình mô phỏng Firestore.
RulesTestContext.firestore(settings?: Firestore.FirestoreSettings) => Firestore;
Phương thức này lấy một thực thể Firestore cho ngữ cảnh kiểm thử này. Bạn có thể sử dụng thực thể SDK ứng dụng JS Firebase được trả về với các API SDK ứng dụng (mô-đun v9 hoặc tương thích v9).
Realtime Database
Realtime Database
RulesTestEnvironment.clearDatabase() => Promise<void>
Phương thức này xoá dữ liệu trong Realtime Database thuộc về projectId
được định cấu hình cho trình mô phỏng Realtime Database.
RulesTestContext.database(databaseURL?: Firestore.FirestoreSettings) => Firestore;
Lấy một thực thể Realtime Database cho ngữ cảnh kiểm thử này. Bạn có thể sử dụng thực thể SDK ứng dụng JS Firebase được trả về với các API SDK ứng dụng (mô-đun hoặc được phân không gian tên, phiên bản 9 trở lên). Phương thức này chấp nhận URL của thực thể Cơ sở dữ liệu theo thời gian thực. Nếu được chỉ định, sẽ trả về một thực thể cho phiên bản được mô phỏng của không gian tên với các tham số được trích xuất từ URL.
Cloud Storage
Cloud Storage
RulesTestEnvironment.clearStorage() => Promise<void>
Phương thức này xoá các đối tượng và siêu dữ liệu trong các bộ chứa bộ nhớ thuộc về projectId
được định cấu hình cho trình mô phỏng Cloud Storage.
RulesTestContext.storage(bucketUrl?: string) => Firebase Storage;
Phương thức này trả về một thực thể Bộ nhớ được định cấu hình để kết nối với trình mô phỏng.
Phương thức này chấp nhận URL gs://
đến Bộ chứa Firebase Storage để kiểm thử. Nếu được chỉ định, sẽ trả về một thực thể Storage cho phiên bản mô phỏng của tên bộ chứa.
Chạy kiểm thử đơn vị cục bộ bằng SDK JavaScript v8
Chọn một sản phẩm để xem các phương thức mà SDK Kiểm thử Firebase sử dụng để giao tiếp với trình mô phỏng.
Cloud Firestore
initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp
Phương thức này trả về một ứng dụng Firebase đã khởi chạy tương ứng với mã dự án và biến xác thực được chỉ định trong các tuỳ chọn. Sử dụng phương thức này để tạo một ứng dụng được xác thực là một người dùng cụ thể để sử dụng trong kiểm thử.
firebase.initializeTestApp({ projectId: "my-test-project", auth: { uid: "alice", email: "alice@example.com" } });
initializeAdminApp({ projectId: string }) => FirebaseApp
Phương thức này trả về một ứng dụng Firebase quản trị đã khởi chạy. Ứng dụng này bỏ qua các quy tắc bảo mật khi thực hiện các thao tác đọc và ghi. Sử dụng thông tin này để tạo một ứng dụng được xác thực là quản trị viên nhằm đặt trạng thái cho các bài kiểm thử.
firebase.initializeAdminApp({ projectId: "my-test-project" });
apps() => [FirebaseApp]
Phương thức này trả về tất cả các ứng dụng quản trị và kiểm thử hiện đã được khởi chạy.
Sử dụng phương thức này để dọn dẹp ứng dụng giữa hoặc sau khi kiểm thử.
Promise.all(firebase.apps().map(app => app.delete()))
loadFirestoreRules({ projectId: string, rules: Object }) => Promise
Phương thức này gửi các quy tắc đến cơ sở dữ liệu đang chạy cục bộ. Phương thức này lấy một đối tượng chỉ định các quy tắc dưới dạng chuỗi. Sử dụng phương thức này để đặt quy tắc của cơ sở dữ liệu.
firebase.loadFirestoreRules({ projectId: "my-test-project", rules: fs.readFileSync("/path/to/firestore.rules", "utf8") });
assertFails(pr: Promise) => Promise
Phương thức này trả về một lời hứa bị từ chối nếu dữ liệu đầu vào thành công hoặc lời hứa thành công nếu dữ liệu đầu vào bị từ chối. Sử dụng phương thức này để xác nhận xem một hoạt động đọc hoặc ghi cơ sở dữ liệu có thành công hay không.
firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
assertSucceeds(pr: Promise) => Promise
Phương thức này trả về một lời hứa thành công nếu dữ liệu đầu vào thành công và bị từ chối nếu dữ liệu đầu vào bị từ chối. Sử dụng phương thức này để xác nhận xem một cơ sở dữ liệu có đọc hoặc ghi thành công hay không.
firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
clearFirestoreData({ projectId: string }) => Promise
Phương thức này xoá tất cả dữ liệu liên kết với một dự án cụ thể trong bản sao Firestore chạy cục bộ. Sử dụng phương thức này để dọn dẹp sau khi kiểm thử.
firebase.clearFirestoreData({ projectId: "my-test-project" });
Realtime Database
Realtime Database
initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp
Sử dụng phương thức này để tạo một ứng dụng được xác thực là một người dùng cụ thể để sử dụng trong kiểm thử.
Trả về một ứng dụng firebase đã khởi chạy tương ứng với tên cơ sở dữ liệu và ghi đè biến xác thực được chỉ định trong các tuỳ chọn.
firebase.initializeTestApp({
databaseName: "my-database",
auth: { uid: "alice" }
});
initializeAdminApp({ databaseName: string }) => FirebaseApp
Sử dụng thông tin này để tạo một ứng dụng được xác thực là quản trị viên nhằm thiết lập trạng thái cho các bài kiểm thử.
Trả về một ứng dụng firebase quản trị được khởi tạo tương ứng với tên cơ sở dữ liệu được chỉ định trong các tuỳ chọn. Ứng dụng này bỏ qua các quy tắc bảo mật khi đọc và ghi vào cơ sở dữ liệu.
firebase.initializeAdminApp({ databaseName: "my-database" });
loadDatabaseRules({ databaseName: string, rules: Object }) => Promise
Sử dụng lớp này để đặt quy tắc của cơ sở dữ liệu.
Gửi các quy tắc đến cơ sở dữ liệu đang chạy cục bộ. Lấy một đối tượng tuỳ chọn chỉ định "databaseName" và "rules" dưới dạng chuỗi.
firebase
.loadDatabaseRules({
databaseName: "my-database",
rules: "{'rules': {'.read': false, '.write': false}}"
});
apps() => [FirebaseApp]
Trả về tất cả ứng dụng kiểm thử và quản trị hiện đã khởi chạy.
Sử dụng mã này để dọn dẹp ứng dụng giữa hoặc sau khi kiểm thử (lưu ý rằng các ứng dụng đã khởi chạy với trình nghe đang hoạt động sẽ ngăn JavaScript thoát):
Promise.all(firebase.apps().map(app => app.delete()))
assertFails(pr: Promise) => Promise
Trả về một lời hứa bị từ chối nếu dữ liệu đầu vào thành công và thành công nếu dữ liệu đầu vào bị từ chối.
Sử dụng câu lệnh này để xác nhận rằng một cơ sở dữ liệu không đọc hoặc ghi được:
firebase.assertFails(app.database().ref("secret").once("value"));
assertSucceeds(pr: Promise) => Promise
Trả về một lời hứa thành công nếu dữ liệu đầu vào thành công và bị từ chối nếu dữ liệu đầu vào bị từ chối.
Sử dụng câu lệnh này để xác nhận rằng một cơ sở dữ liệu đã đọc hoặc ghi thành công:
firebase.assertSucceeds(app.database().ref("public").once("value"));
Cloud Storage
Cloud Storage
initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp
Sử dụng thông tin này để tạo một ứng dụng được xác thực là một người dùng cụ thể để sử dụng trong kiểm thử.
Trả về một ứng dụng firebase đã khởi chạy tương ứng với tên bộ chứa bộ nhớ và ghi đè biến xác thực được chỉ định trong các tuỳ chọn.
firebase.initializeTestApp({
storageBucket: "my-bucket",
auth: { uid: "alice" }
});
initializeAdminApp({ storageBucket: string }) => FirebaseApp
Sử dụng thông tin này để tạo một ứng dụng được xác thực là quản trị viên nhằm thiết lập trạng thái cho các bài kiểm thử.
Trả về một ứng dụng firebase quản trị đã khởi chạy tương ứng với tên bộ chứa bộ nhớ được chỉ định trong các tuỳ chọn. Ứng dụng này bỏ qua các quy tắc bảo mật khi đọc và ghi vào bộ chứa.
firebase.initializeAdminApp({ storageBucket: "my-bucket" });
loadStorageRules({ storageBucket: string, rules: Object }) => Promise
Sử dụng tính năng này để đặt quy tắc cho bộ nhớ của bạn.
Gửi các quy tắc đến bộ chứa bộ nhớ được quản lý cục bộ. Lấy một đối tượng tuỳ chọn chỉ định "storageBucket" và "rules" dưới dạng chuỗi.
firebase
.loadStorageRules({
storageBucket: "my-bucket",
rules: fs.readFileSync("/path/to/storage.rules", "utf8")
});
apps() => [FirebaseApp]
Trả về tất cả ứng dụng kiểm thử và quản trị hiện đã khởi chạy.
Sử dụng mã này để dọn dẹp ứng dụng giữa hoặc sau khi kiểm thử (lưu ý rằng các ứng dụng đã khởi chạy với trình nghe đang hoạt động sẽ ngăn JavaScript thoát):
Promise.all(firebase.apps().map(app => app.delete()))
assertFails(pr: Promise) => Promise
Trả về một lời hứa bị từ chối nếu dữ liệu đầu vào thành công và thành công nếu dữ liệu đầu vào bị từ chối.
Sử dụng mã này để xác nhận rằng một bộ chứa bộ nhớ không đọc hoặc ghi được:
firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());
assertSucceeds(pr: Promise) => Promise
Trả về một lời hứa thành công nếu dữ liệu đầu vào thành công và bị từ chối nếu dữ liệu đầu vào bị từ chối.
Sử dụng phương thức này để xác nhận rằng một bộ chứa bộ nhớ đã đọc hoặc ghi thành công:
firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());
API thư viện RUT cho SDK JS phiên bản 8
Chọn một sản phẩm để xem các phương thức mà SDK Kiểm thử Firebase sử dụng để giao tiếp với trình mô phỏng.
Cloud Firestore
Cloud Firestore
initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp
Phương thức này trả về một ứng dụng Firebase đã khởi chạy tương ứng với mã dự án và biến xác thực được chỉ định trong các tuỳ chọn. Sử dụng phương thức này để tạo một ứng dụng được xác thực là một người dùng cụ thể để sử dụng trong kiểm thử.
firebase.initializeTestApp({ projectId: "my-test-project", auth: { uid: "alice", email: "alice@example.com" } });
initializeAdminApp({ projectId: string }) => FirebaseApp
Phương thức này trả về một ứng dụng Firebase quản trị đã khởi chạy. Ứng dụng này bỏ qua các quy tắc bảo mật khi thực hiện các thao tác đọc và ghi. Sử dụng thông tin này để tạo một ứng dụng được xác thực là quản trị viên nhằm đặt trạng thái cho các bài kiểm thử.
firebase.initializeAdminApp({ projectId: "my-test-project" });
apps() => [FirebaseApp]
Phương thức này trả về tất cả các ứng dụng quản trị và kiểm thử hiện đã được khởi chạy.
Sử dụng phương thức này để dọn dẹp ứng dụng giữa hoặc sau khi kiểm thử.
Promise.all(firebase.apps().map(app => app.delete()))
loadFirestoreRules({ projectId: string, rules: Object }) => Promise
Phương thức này gửi các quy tắc đến cơ sở dữ liệu đang chạy cục bộ. Phương thức này lấy một đối tượng chỉ định các quy tắc dưới dạng chuỗi. Sử dụng phương thức này để đặt quy tắc của cơ sở dữ liệu.
firebase.loadFirestoreRules({ projectId: "my-test-project", rules: fs.readFileSync("/path/to/firestore.rules", "utf8") });
assertFails(pr: Promise) => Promise
Phương thức này trả về một lời hứa bị từ chối nếu dữ liệu đầu vào thành công hoặc lời hứa thành công nếu dữ liệu đầu vào bị từ chối. Sử dụng phương thức này để xác nhận xem một hoạt động đọc hoặc ghi cơ sở dữ liệu có thành công hay không.
firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
assertSucceeds(pr: Promise) => Promise
Phương thức này trả về một lời hứa thành công nếu dữ liệu đầu vào thành công và bị từ chối nếu dữ liệu đầu vào bị từ chối. Sử dụng phương thức này để xác nhận xem một cơ sở dữ liệu có đọc hoặc ghi thành công hay không.
firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
clearFirestoreData({ projectId: string }) => Promise
Phương thức này xoá tất cả dữ liệu liên kết với một dự án cụ thể trong bản sao Firestore chạy cục bộ. Sử dụng phương thức này để dọn dẹp sau khi kiểm thử.
firebase.clearFirestoreData({ projectId: "my-test-project" });
Realtime Database
Realtime Database
initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp
Sử dụng phương thức này để tạo một ứng dụng được xác thực là một người dùng cụ thể để sử dụng trong kiểm thử.
Trả về một ứng dụng firebase đã khởi chạy tương ứng với tên cơ sở dữ liệu và ghi đè biến xác thực được chỉ định trong các tuỳ chọn.
firebase.initializeTestApp({
databaseName: "my-database",
auth: { uid: "alice" }
});
initializeAdminApp({ databaseName: string }) => FirebaseApp
Sử dụng thông tin này để tạo một ứng dụng được xác thực là quản trị viên nhằm thiết lập trạng thái cho các bài kiểm thử.
Trả về một ứng dụng firebase quản trị được khởi tạo tương ứng với tên cơ sở dữ liệu được chỉ định trong các tuỳ chọn. Ứng dụng này bỏ qua các quy tắc bảo mật khi đọc và ghi vào cơ sở dữ liệu.
firebase.initializeAdminApp({ databaseName: "my-database" });
loadDatabaseRules({ databaseName: string, rules: Object }) => Promise
Sử dụng lớp này để đặt quy tắc của cơ sở dữ liệu.
Gửi các quy tắc đến cơ sở dữ liệu đang chạy cục bộ. Lấy một đối tượng tuỳ chọn chỉ định "databaseName" và "rules" dưới dạng chuỗi.
firebase
.loadDatabaseRules({
databaseName: "my-database",
rules: "{'rules': {'.read': false, '.write': false}}"
});
apps() => [FirebaseApp]
Trả về tất cả ứng dụng kiểm thử và quản trị hiện đã khởi chạy.
Sử dụng mã này để dọn dẹp ứng dụng giữa hoặc sau khi kiểm thử (lưu ý rằng các ứng dụng đã khởi chạy với trình nghe đang hoạt động sẽ ngăn JavaScript thoát):
Promise.all(firebase.apps().map(app => app.delete()))
assertFails(pr: Promise) => Promise
Trả về một lời hứa bị từ chối nếu dữ liệu đầu vào thành công và thành công nếu dữ liệu đầu vào bị từ chối.
Sử dụng câu lệnh này để xác nhận rằng một cơ sở dữ liệu không đọc hoặc ghi được:
firebase.assertFails(app.database().ref("secret").once("value"));
assertSucceeds(pr: Promise) => Promise
Trả về một lời hứa thành công nếu dữ liệu đầu vào thành công và bị từ chối nếu dữ liệu đầu vào bị từ chối.
Sử dụng câu lệnh này để xác nhận rằng một cơ sở dữ liệu đã đọc hoặc ghi thành công:
firebase.assertSucceeds(app.database().ref("public").once("value"));
Cloud Storage
Cloud Storage
initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp
Sử dụng thông tin này để tạo một ứng dụng được xác thực là một người dùng cụ thể để sử dụng trong kiểm thử.
Trả về một ứng dụng firebase đã khởi chạy tương ứng với tên bộ chứa bộ nhớ và ghi đè biến xác thực được chỉ định trong các tuỳ chọn.
firebase.initializeTestApp({
storageBucket: "my-bucket",
auth: { uid: "alice" }
});
initializeAdminApp({ storageBucket: string }) => FirebaseApp
Sử dụng thông tin này để tạo một ứng dụng được xác thực là quản trị viên nhằm thiết lập trạng thái cho các bài kiểm thử.
Trả về một ứng dụng firebase quản trị đã khởi chạy tương ứng với tên bộ chứa bộ nhớ được chỉ định trong các tuỳ chọn. Ứng dụng này bỏ qua các quy tắc bảo mật khi đọc và ghi vào bộ chứa.
firebase.initializeAdminApp({ storageBucket: "my-bucket" });
loadStorageRules({ storageBucket: string, rules: Object }) => Promise
Sử dụng tính năng này để đặt quy tắc cho bộ nhớ của bạn.
Gửi các quy tắc đến bộ chứa bộ nhớ được quản lý cục bộ. Lấy một đối tượng tuỳ chọn chỉ định "storageBucket" và "rules" dưới dạng chuỗi.
firebase
.loadStorageRules({
storageBucket: "my-bucket",
rules: fs.readFileSync("/path/to/storage.rules", "utf8")
});
apps() => [FirebaseApp]
Trả về tất cả ứng dụng kiểm thử và quản trị hiện đã khởi chạy.
Sử dụng mã này để dọn dẹp ứng dụng giữa hoặc sau khi kiểm thử (lưu ý rằng các ứng dụng đã khởi chạy với trình nghe đang hoạt động sẽ ngăn JavaScript thoát):
Promise.all(firebase.apps().map(app => app.delete()))
assertFails(pr: Promise) => Promise
Trả về một lời hứa bị từ chối nếu dữ liệu đầu vào thành công và thành công nếu dữ liệu đầu vào bị từ chối.
Sử dụng mã này để xác nhận rằng một bộ chứa bộ nhớ không đọc hoặc ghi được:
firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());
assertSucceeds(pr: Promise) => Promise
Trả về một lời hứa thành công nếu dữ liệu đầu vào thành công và bị từ chối nếu dữ liệu đầu vào bị từ chối.
Sử dụng phương thức này để xác nhận rằng một bộ chứa bộ nhớ đã đọc hoặc ghi thành công:
firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());