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.ruleshoặcstorage.rulescủ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ứcloadFirestoreRuleshoặcloadStorageRulesnhư 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-testinghỗ trợ mô phỏngauthtrong Quy tắc bảo mật, giúp việ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, 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 pháp này sẽ hoạt động như thể nó đã được xác thực thành công với bất kỳ thực thể nào bạn cung cấp. Nếu bạn truyền vàonull, 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 != nullsẽ 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 REST API 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 thư viện kiểm thử đơn vị Quy tắc bảo mật với cả SDK JavaScript phiên bản 9 và SDK phiên bản 8. Các API của 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 hơn để 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ộ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 thử nghiệm v8.
- Các phương pháp kiểm tra phổ biến và các hàm tiện ích trong SDK v9
- Các phương pháp thử nghiệm dành riêng cho trình giả lập trong SDK v9
Sử dụng mô-đun @firebase/rules-unit-testing để tương tác với trình giả lập 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 lại xem trình giả lập có thực sự đang chạy không.
Chúng tôi thực sự khuyên bạn nên sử dụng phiên bản Node.js mới nhất để có thể sử dụng ký hiệu async/await. Hầu như mọi hành vi mà bạn muốn kiểm tra đều liên quan đến các hàm không đồng bộ và mô-đun kiểm tra được thiết kế để hoạt động với mã dựa trên Promise.
Thư viện kiểm thử đơn vị v9 Rules luôn nhận biết trình giả lập và không bao giờ độ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 các bài kiểm tra đơn vị bao gồm:
- Tạo và cấu hình
RulesTestEnvironmentbằng lệnh gọi tớiinitializeTestEnvironment. - Thiết lập dữ liệu thử nghiệm mà không kích hoạt Rules, sử dụng phương pháp tiện lợi cho phép bạn tạm thời bỏ qua chúng,
RulesTestEnvironment.withSecurityRulesDisabled. - Thiết lập bộ kiểm thử và các hook trước/sau cho mỗi lần kiểm thử với các lệnh gọi để dọn dẹp dữ liệu và môi trường kiểm thử, như
RulesTestEnvironment.cleanup()hoặcRulesTestEnvironment.clearFirestore(). - Triển khai các trường hợp thử nghiệm mô phỏng trạng thái xác thực bằng cách sử dụng
RulesTestEnvironment.authenticatedContextvàRulesTestEnvironment.unauthenticatedContext.
Các phương pháp phổ biến và các hàm tiện ích
Ngoài ra, hãy xem các phương pháp thử nghiệm dành riêng cho trình giả lập bằng cách sử dụng API 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().doc('/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 lấy một hàm callback, hàm này 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 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 pháp dành riêng cho trình giả lập
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 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 quản trị đã đượ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 đọ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à chế độ ghi đè biến auth đượ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 options chỉ định "databaseName" và "rules" của bạn dưới dạng 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 các bài 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 nhóm lưu trữ và chế độ 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 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 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 nhóm.
firebase.initializeAdminApp({ storageBucket: "my-bucket" });
loadStorageRules({ storageBucket: string, rules: Object }) => Promise
Sử dụng thông tin 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ữ được quản lý cục bộ. 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 các bài 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 quản trị đã đượ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 đọ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à chế độ ghi đè biến auth đượ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 options chỉ định "databaseName" và "rules" của bạn dưới dạng 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 các bài 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 nhóm lưu trữ và chế độ 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 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 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 nhóm.
firebase.initializeAdminApp({ storageBucket: "my-bucket" });
loadStorageRules({ storageBucket: string, rules: Object }) => Promise
Sử dụng thông tin 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ữ được quản lý cục bộ. 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 các bài 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());