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ụ hữu ích để xác minh cấu hình Firebase Security Rules của bạn. Sử dụng Trình mô phỏng Firebase để chạy và tự động hoá các kiểm thử đơn vị trong môi trường cục bộ. Các phương pháp được trình bày trong tài liệu này sẽ giúp bạn xây dựng và tự động hoá các kiểm thử đơn vị cho ứng dụng để xác thực Rules.
Nếu bạn chưa thực hiện, hãy thiết lập Trình mô phỏng Firebase.
Trước khi bạn 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ặcstorage.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ặcloadStorageRules
như mô tả bên dưới, thì trình mô phỏng sẽ coi tất cả các dự án đều có quy tắc mở. - Mặc dù hầu hết các Firebase SDK đều hoạt động trực tiếp với trình mô phỏng, nhưng chỉ có thư viện
@firebase/rules-unit-testing
hỗ trợ mô phỏngauth
trong Quy tắc bảo mật, giúp các kiểm thử đơn vị trở nên 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, chẳng hạn như xoá tất cả dữ liệu, như được liệt kê dưới đây. - Các trình mô phỏng cũng sẽ chấp nhận mã thông báo Firebase Auth do sản xuất được cung cấp thông qua SDK ứng dụng và đánh giá các quy tắc cho phù hợp. Điều này cho phép kết nối trực tiếp ứng dụng của bạn với các 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 công khai
- 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 đều bắt đầu bằng các quy tắc khép kín, vì vậy, người dùng không phải là 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 hạn mức và hạn ngạch của gói Spark (đáng chú ý nhất là hạn chế mỗi phiên bản có 100 kết nối đồng thời).
- Mọi cơ sở dữ liệu sẽ chấp nhận chuỗi
"owner"
làm mã thông báo uỷ quyền quản trị. - Hiện tại, các trình mô phỏng không có hoạt động tương tác với các sản phẩm khác của Firebase. Đặc biệt, 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 lấy một 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ềnnull
, thì nó sẽ hoạt động như một người dùng chưa được 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 phiên bản Firebase Realtime Database sản xuất 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 JavaScript SDK phiên bản 9
Firebase phân phối một thư viện kiểm thử đơn vị Security Rules (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 có sự khác biệt đáng kể. Bạn nên dùng thư viện kiểm thử phiên bản 9. Thư viện này tinh giản hơn và ít cần thiết lập để kết nối với trình mô phỏng, nhờ đó giúp bạn tránh vô tình sử dụng các tài nguyên sản xuất. Để đả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ử phiên bản 8.
- 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 lỗi 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 gần đây để 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 Promise.
Thư viện Kiểm thử đơn vị theo quy tắc phiên bản 9 luôn nhận biết được các trình mô phỏng và không bao giờ ảnh hưởng đến 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 theo mô-đun phiên bản 9. 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, bằng cách 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 phương thức này,
RulesTestEnvironment.withSecurityRulesDisabled
. - Thiết lập bộ thử nghiệm và các lệnh gọi trước/sau mỗi thử nghiệm để dọn dẹp dữ liệu và môi trường thử nghiệm, 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 cách sử dụng API theo mô-đun.
initializeTestEnvironment() => RulesTestEnvironment
Hàm này khởi tạo một môi trường kiểm thử để kiểm thử đơn vị quy tắc. 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 ra một RulesTestContext
, hoạt động giố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 khai báo 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 kiểm thử để truy cập vào mọi thực thể trình mô phỏng đã định cấu hình, kể cả những 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 ra một RulesTestContext
, hoạt động như một ứng dụng không đăng nhập thông 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 kiểm thử để truy cập vào mọi thực thể trình mô phỏng đã định cấu hình, kể cả những 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ử có ngữ cảnh hoạt động như thể Quy tắc bảo mật đã bị vô hiệu hoá.
Phương thức này sử dụng một hàm gọi lại, hàm này sẽ lấy ngữ cảnh Security-Rules-bypassing và trả về một promise. Ngữ cảnh sẽ bị huỷ sau khi lời hứa phân giải / từ chối.
RulesTestEnvironment.cleanup()
Phương thức này sẽ huỷ 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 một cách sạch sẽ.
Phương thức này hoàn toàn không thay đổi trạng thái của trình mô phỏng. Để đặ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à một hàm tiện ích của trường hợp kiểm thử.
Hàm này khẳng định rằng Promise được cung cấp bao bọc một thao tác trình mô phỏng sẽ được phân giải 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à một hàm tiện ích của trường hợp kiểm thử.
Hàm này khẳng định rằng Promise được cung cấp bao bọc một thao tác 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'), { ... });
Các phương thức dành riêng cho trình mô phỏng
Bạn cũng có thể xem các phương thức kiểm thử và hàm tiện ích phổ biến bằng cách sử dụng API theo 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 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 phiên bản Firebase JS Client SDK được trả về với các API SDK ứng dụng (v9 theo mô-đun hoặc v9 tương thích).
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;
Nhận một thực thể Realtime Database cho ngữ cảnh kiểm thử này. Bạn có thể sử dụng phiên bản Firebase JS Client SDK được trả về với các API SDK ứng dụng (theo mô-đun hoặc theo không gian tên, phiên bản 9 trở lên). Phương thức này chấp nhận một URL của phiên bản Realtime Database. Nếu được chỉ định, sẽ trả về một phiên bản cho phiên bản 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 vùng lưu trữ 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ể Storage đượ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 một URL gs://
đến Bộ chứa lưu trữ Firebase để kiểm thử. Nếu được chỉ định, hàm này sẽ trả về một thực thể Storage cho phiên bản mô phỏng của tên nhóm.
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à Firebase Test SDK dùng để tương tác 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 uỷ quyền được chỉ định trong các lựa chọn. Sử dụng phương thức này để tạo một ứng dụng được xác thực dưới dạng một người dùng cụ thể để sử dụng trong các bài 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 dành cho quản trị viên đã được khởi tạo. Ứng dụng này bỏ qua các quy tắc bảo mật khi thực hiện thao tác đọc và ghi. Sử dụng phương thức này để tạo một ứng dụng được xác thực với tư cách là quản trị viên để đặt trạng thái cho các 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 kiểm thử và ứng dụng quản trị hiện đã được khởi chạy.
Dùng phương thức này để dọn dẹp các ứ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 một 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 một chuỗi. Hãy sử dụng phương thức này để đặt các quy tắc cho cơ sở dữ liệu của bạn.
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 đầu vào thành công hoặc thành công nếu đầu vào bị từ chối. Sử dụng phương thức này để xác nhận xem thao tác đọc hoặc ghi cơ sở dữ liệu có thất bại 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 thao tác đọc hoặc ghi cơ sở dữ liệu có 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 sẽ xoá tất cả dữ liệu liên kết với một dự án cụ thể trong phiên bản Firestore đang 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 dưới dạng một người dùng cụ thể để sử dụng trong các bài 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à biến auth ghi đè được chỉ định trong các tuỳ chọn.
firebase.initializeTestApp({
databaseName: "my-database",
auth: { uid: "alice" }
});
initializeAdminApp({ databaseName: string }) => FirebaseApp
Sử dụng phương thức này để tạo một ứng dụng được xác thực với tư cách là quản trị viên nhằm thiết lập trạng thái cho các kiểm thử.
Trả về một ứng dụng Firebase dành cho quản trị viên đã khởi tạo tương ứng với tên cơ sở dữ liệu được chỉ định trong các lựa 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ựa chọn này để đặt các quy tắc cho cơ sở dữ liệu của bạn.
Gửi các quy tắc đến một 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" của bạn dưới dạng các chuỗi.
firebase
.loadDatabaseRules({
databaseName: "my-database",
rules: "{'rules': {'.read': false, '.write': false}}"
});
apps() => [FirebaseApp]
Trả về tất cả các ứng dụng kiểm thử và ứng dụng quản trị hiện đã được khởi chạy.
Sử dụng phương thức này để dọn dẹp các ứ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 có 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 đầu vào thành công và thành công nếu đầu vào bị từ chối.
Sử dụng phương thức này để xác nhận rằng thao tác đọc hoặc ghi cơ sở dữ liệu không thành công:
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 đầu vào thành công và bị từ chối nế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 thao tác đọc hoặc ghi cơ sở dữ liệu đã 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 phương thức này để tạo một ứng dụng được xác thực dưới dạng một người dùng cụ thể để sử dụng trong các bài kiểm thử.
Trả về một ứng dụng firebase đã khởi chạy tương ứng với tên vùng chứa lưu trữ và chế độ ghi đè biến xác thực được chỉ định trong các lựa chọn.
firebase.initializeTestApp({
storageBucket: "my-bucket",
auth: { uid: "alice" }
});
initializeAdminApp({ storageBucket: string }) => FirebaseApp
Sử dụng phương thức này để tạo một ứng dụng được xác thực với tư cách là quản trị viên nhằm thiết lập trạng thái cho các 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 nhóm lưu trữ được chỉ định trong các lựa chọn. Ứng dụng này bỏ qua các quy tắc bảo mật khi đọc và ghi vào nhóm.
firebase.initializeAdminApp({ storageBucket: "my-bucket" });
loadStorageRules({ storageBucket: string, rules: Object }) => Promise
Sử dụng chế độ này để đặt các quy tắc cho nhóm lưu trữ.
Gửi các quy tắc đến bộ chứa lưu trữ do địa phương quản lý. Lấy một đối tượng tuỳ chọn chỉ định "storageBucket" và "rules" của bạn dưới dạng các chuỗi.
firebase
.loadStorageRules({
storageBucket: "my-bucket",
rules: fs.readFileSync("/path/to/storage.rules", "utf8")
});
apps() => [FirebaseApp]
Trả về tất cả các ứng dụng kiểm thử và ứng dụng quản trị hiện đã được khởi chạy.
Sử dụng phương thức này để dọn dẹp các ứ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 có 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 đầu vào thành công và thành công nếu đầu vào bị từ chối.
Sử dụng phương thức này để xác nhận rằng thao tác đọc hoặc ghi vào bộ chứa lưu trữ không thành công:
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 đầu vào thành công và bị từ chối nếu đầu vào bị từ chối.
Sử dụng phương thức này để xác nhận rằng thao tác đọc hoặc ghi vào một vùng lưu trữ đã thành công:
firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());
API thư viện RUT cho JS SDK phiên bản 8
Chọn một sản phẩm để xem các phương thức mà Firebase Test SDK dùng để tương tác 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 uỷ quyền được chỉ định trong các lựa chọn. Sử dụng phương thức này để tạo một ứng dụng được xác thực dưới dạng một người dùng cụ thể để sử dụng trong các bài 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 dành cho quản trị viên đã được khởi tạo. Ứng dụng này bỏ qua các quy tắc bảo mật khi thực hiện thao tác đọc và ghi. Sử dụng phương thức này để tạo một ứng dụng được xác thực với tư cách là quản trị viên để đặt trạng thái cho các 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 kiểm thử và ứng dụng quản trị hiện đã được khởi chạy.
Dùng phương thức này để dọn dẹp các ứ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 một 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 một chuỗi. Hãy sử dụng phương thức này để đặt các quy tắc cho cơ sở dữ liệu của bạn.
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 đầu vào thành công hoặc thành công nếu đầu vào bị từ chối. Sử dụng phương thức này để xác nhận xem thao tác đọc hoặc ghi cơ sở dữ liệu có thất bại 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 thao tác đọc hoặc ghi cơ sở dữ liệu có 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 sẽ xoá tất cả dữ liệu liên kết với một dự án cụ thể trong phiên bản Firestore đang 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 dưới dạng một người dùng cụ thể để sử dụng trong các bài 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à biến auth ghi đè được chỉ định trong các tuỳ chọn.
firebase.initializeTestApp({
databaseName: "my-database",
auth: { uid: "alice" }
});
initializeAdminApp({ databaseName: string }) => FirebaseApp
Sử dụng phương thức này để tạo một ứng dụng được xác thực với tư cách là quản trị viên nhằm thiết lập trạng thái cho các kiểm thử.
Trả về một ứng dụng Firebase dành cho quản trị viên đã khởi tạo tương ứng với tên cơ sở dữ liệu được chỉ định trong các lựa 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ựa chọn này để đặt các quy tắc cho cơ sở dữ liệu của bạn.
Gửi các quy tắc đến một 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" của bạn dưới dạng các chuỗi.
firebase
.loadDatabaseRules({
databaseName: "my-database",
rules: "{'rules': {'.read': false, '.write': false}}"
});
apps() => [FirebaseApp]
Trả về tất cả các ứng dụng kiểm thử và ứng dụng quản trị hiện đã được khởi chạy.
Sử dụng phương thức này để dọn dẹp các ứ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 có 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 đầu vào thành công và thành công nếu đầu vào bị từ chối.
Sử dụng phương thức này để xác nhận rằng thao tác đọc hoặc ghi cơ sở dữ liệu không thành công:
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 đầu vào thành công và bị từ chối nế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 thao tác đọc hoặc ghi cơ sở dữ liệu đã 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 phương thức này để tạo một ứng dụng được xác thực dưới dạng một người dùng cụ thể để sử dụng trong các bài kiểm thử.
Trả về một ứng dụng firebase đã khởi chạy tương ứng với tên vùng chứa lưu trữ và chế độ ghi đè biến xác thực được chỉ định trong các lựa chọn.
firebase.initializeTestApp({
storageBucket: "my-bucket",
auth: { uid: "alice" }
});
initializeAdminApp({ storageBucket: string }) => FirebaseApp
Sử dụng phương thức này để tạo một ứng dụng được xác thực với tư cách là quản trị viên nhằm thiết lập trạng thái cho các 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 nhóm lưu trữ được chỉ định trong các lựa chọn. Ứng dụng này bỏ qua các quy tắc bảo mật khi đọc và ghi vào nhóm.
firebase.initializeAdminApp({ storageBucket: "my-bucket" });
loadStorageRules({ storageBucket: string, rules: Object }) => Promise
Sử dụng chế độ này để đặt các quy tắc cho nhóm lưu trữ.
Gửi các quy tắc đến bộ chứa lưu trữ do địa phương quản lý. Lấy một đối tượng tuỳ chọn chỉ định "storageBucket" và "rules" của bạn dưới dạng các chuỗi.
firebase
.loadStorageRules({
storageBucket: "my-bucket",
rules: fs.readFileSync("/path/to/storage.rules", "utf8")
});
apps() => [FirebaseApp]
Trả về tất cả các ứng dụng kiểm thử và ứng dụng quản trị hiện đã được khởi chạy.
Sử dụng phương thức này để dọn dẹp các ứ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 có 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 đầu vào thành công và thành công nếu đầu vào bị từ chối.
Sử dụng phương thức này để xác nhận rằng thao tác đọc hoặc ghi vào bộ chứa lưu trữ không thành công:
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 đầu vào thành công và bị từ chối nếu đầu vào bị từ chối.
Sử dụng phương thức này để xác nhận rằng thao tác đọc hoặc ghi vào một vùng lưu trữ đã thành công:
firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());