Bộ trình giả lập cục bộ Firebase giúp xác thực đầy đủ các tính năng và hành vi của ứng dụng của bạn dễ dàng hơn . Đây cũng là một công cụ tuyệt vời để xác minh cấu hình Quy tắc bảo mật Firebase của bạn. Sử dụng Trình giả lập Firebase để chạy và tự động hóa các thử nghiệm đơn vị trong môi trường cục bộ. Các phương pháp được nêu trong tài liệu này sẽ giúp bạn khi bạn xây dựng và tự động hóa các bài kiểm tra đơn vị cho ứng dụng để xác thực Quy tắc của bạn.
Nếu bạn chưa có, hãy thiết lập Trình mô phỏng Firebase .
Trước khi bạn chạy trình giả lập
Trước khi bạn bắt đầu sử dụng trình giả lập, hãy ghi nhớ những điều sau:
- Ban đầu, trình giả lập 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
của bạn. 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ư được mô tả bên dưới, trình giả lập sẽ coi tất cả các dự án là có quy tắc mở. - Mặc dù hầu hết các SDK Firebase hoạt động trực tiếp với trình giả lập, 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 kiểm tra đơn vị dễ dàng hơn nhiều. Ngoài ra, thư viện hỗ trợ một số tính năng dành riêng cho trình giả lập như xóa tất cả dữ liệu, như được liệt kê bên dưới. - Trình giả lập cũng sẽ chấp nhận mã thông báo Xác thực Firebase sản xuất được cung cấp thông qua SDK ứng dụng khách và đánh giá các quy tắc tương ứng, cho phép kết nối trực tiếp ứng dụng của bạn với trình giả lập trong các thử nghiệm tích hợp và thủ công.
Sự khác biệt giữa trình giả lập cơ sở dữ liệu và sản xuất
- Bạn không cần phải tạo một thể hiện cơ sở dữ liệu một cách rõ ràng. Trình giả lập sẽ tự động tạo bất kỳ phiên bản cơ sở dữ liệu nào được truy cập.
- Mỗi cơ sở dữ liệu mới được bắt đầu với các quy tắc đóng, 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 mô phỏng áp dụng các giới hạn và hạn ngạch của gói Spark (đáng chú ý nhất là điều này giới hạn mỗi phiên bản ở 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 xác thực của quản trị viên. - Trình giả lập 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ú ý, luồng 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
, lấy trườngauth
. Đối tượng Firebase được tạo bằng phương pháp này hoạt động như thể nó đã được xác thực thành công như bất kỳ thực thể nào bạn cung cấp. Nếu bạn chuyển vàonull
, nó sẽ hoạt động như một người dùng chưa được xác thực ( ví dụ: quy tắcauth != null
sẽ không thành công).
Tương tác với trình giả lập Cơ sở dữ liệu thời gian thực
Phiên bản Cơ sở dữ liệu thời gian thực Firebase sản xuất có thể truy cập được tại tên miền phụ của firebaseio.com
và bạn có thể truy cập API REST như sau:
https://<database_name>.firebaseio.com/path/to/my/data.json
Trình giả lập chạy cục bộ và có sẵn tại localhost:9000
. Để tương tác với một phiên bản 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 thử nghiệm đơn vị cục bộ với SDK JavaScript phiên bản 9
Firebase phân phối thư viện thử nghiệm đơ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 thư viện khác nhau đáng kể. Chúng tôi khuyên dùng thư viện thử nghiệm v9, thư viện này được sắp xếp hợp lý hơn và yêu cầu ít thiết lập hơn để kết nối với trình giả lập và do đó tránh sử dụng ngẫu nhiên tài nguyên sản xuất một cách an toàn. Để 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 thử nghiệm phổ biến và chức năng tiện ích trong SDK v9
- Các phương pháp thử nghiệm dành riêng cho trình mô phỏng trong SDK v9
Sử dụng mô- @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ỹ xem trình mô phỏng có thực sự chạy hay không.
Chúng tôi thực sự khuyên bạn nên sử dụng phiên bản Node.js gần đây để bạn có thể sử dụng ký hiệu async/await
. Hầu như tất cả các hành vi mà bạn có thể muốn kiểm tra đều liên quan đến các chức năng không đồng bộ và mô-đun kiểm tra được thiết kế để hoạt động với mã dựa trên Lời hứa.
Thư viện Kiểm tra đơn vị quy tắc v9 luôn biết về 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 mô-đun v9. Ví dụ:
import {
assertFails,
assertSucceeds,
initializeTestEnvironment,
RulesTestEnvironment,
} 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 được nhập, việc triển khai các bài kiểm tra đơn vị bao gồm:
- Tạo và định cấu hình
RulesTestEnvironment
bằng lệnh gọiinitializeTestEnvironment
. - Thiết lập dữ liệu thử nghiệm mà không cần kích hoạt Quy tắc, sử dụng phương pháp thuận tiện cho phép bạn tạm thời bỏ qua chúng,
RulesTestEnvironment.withSecurityRulesDisabled
. - Thiết lập bộ thử nghiệm và móc nối trước/sau mỗi thử nghiệm với các lệnh gọi để dọn dẹp môi trường và dữ liệu thử nghiệm, như
RulesTestEnvironment.cleanup()
hoặcRulesTestEnvironment.clearFirestore()
. - Triển khai các trường hợp thử nghiệm bắt chước các 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 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 mô phỏng 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 thử nghiệm để thử nghiệm đơn vị quy tắc. Gọi chức năng này đầu tiên để thiết lập thử nghiệm. Thực hiện thành công yêu cầu trình giả lập đang chạy.
Hàm chấp nhận một đối tượng tùy chọn xác định TestEnvironmentConfig
, có thể bao gồm ID dự án và 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 giống như một người dùng Xác thực đã được 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 Xác thực giả được đính kèm. Theo tùy chọn, chuyển một đối tượng xác định các xác nhận quyền sở hữu hoặc ghi đè tùy chỉnh cho tải trọng mã thông báo Xác thực.
Sử dụng đối tượng ngữ cảnh thử nghiệm được trả về trong các thử nghiệm của bạn để truy cập vào bất kỳ phiên bản trình giả lập nào được định cấu hình, bao gồm cả những phiên bản được định cấu hình với 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 giống như một ứng dụng khách chưa đăng nhập qua Xác thực. Các yêu cầu được tạo thông qua ngữ cảnh được trả về sẽ không đính kèm mã xác thực Firebase.
Sử dụng đối tượng ngữ cảnh thử nghiệm được trả về trong các thử nghiệm của bạn để truy cập vào bất kỳ phiên bản trình giả lập nào được định cấu hình, bao gồm cả những phiên bản được định cấu hình với 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 chức năng thiết lập thử nghiệm 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 nhận một chức năng gọi lại, lấy ngữ cảnh bỏ qua quy tắc bảo mật và trả về một lời hứa. Bối cảnh sẽ bị hủy sau khi lời hứa giải quyết/từ chối.
RulesTestEnvironment.cleanup()
Phương pháp này hủy tất cả RulesTestContexts
được tạo trong môi trường thử nghiệm và dọn sạch các tài nguyên cơ bản, cho phép thoát sạch.
Phương pháp này không thay đổi trạng thái của trình giả lập theo bất kỳ cách nào. Để đặt lại dữ liệu giữa các lần kiểm tra, hãy sử dụng phương pháp xóa dữ liệu dành riêng cho trình giả lập ứng dụng.
assertSucceeds(pr: Promise<any>)) => Promise<any>
Đây là một chức năng tiện ích trường hợp thử nghiệm.
Chức năng khẳng định rằng Promise được cung cấp gói một hoạt động giả lập sẽ được giải quyết mà không 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 chức năng tiện ích trường hợp thử nghiệm.
Hàm khẳng định rằng Promise được cung cấp bao bọc một hoạt động giả lập 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 pháp dành riêng cho trình giả lập
Ngoài ra, hãy xem các phương pháp thử nghiệm phổ biến và chức năng tiện ích bằng cách sử dụng API mô-đun .
Cửa hàng lửa trên đám mây
Cửa hàng lửa trên đám mây
RulesTestEnvironment.clearFirestore() => Promise<void>
Phương pháp này xóa dữ liệu trong cơ sở dữ liệu Firestore thuộc về projectId
được định cấu hình cho trình giả lập Firestore.
RulesTestContext.firestore(settings?: Firestore.FirestoreSettings) => Firestore;
Phương thức này lấy một phiên bản Firestore cho ngữ cảnh thử nghiệm này. Phiên bản SDK ứng dụng khách Firebase JS được trả lại có thể được sử dụng với API SDK ứng dụng khách (mô-đun v9 hoặc tương thích v9).
Cơ sở dữ liệu thời gian thực
Cơ sở dữ liệu thời gian thực
RulesTestEnvironment.clearDatabase() => Promise<void>
Phương pháp này xóa dữ liệu trong Cơ sở dữ liệu thời gian thực thuộc về projectId
được định cấu hình cho trình giả lập Cơ sở dữ liệu thời gian thực.
RulesTestContext.database(databaseURL?: Firestore.FirestoreSettings) => Firestore;
Nhận phiên bản Cơ sở dữ liệu thời gian thực cho ngữ cảnh thử nghiệm này. Phiên bản SDK ứng dụng khách Firebase JS được trả lại có thể được sử dụng với API SDK ứng dụng khách (mô-đun hoặc không gian đặt tên, phiên bản 9 trở lên). Phương thức chấp nhận một URL của phiên bản Cơ sở dữ liệu thời gian thực. Nếu được chỉ định, 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.
Lưu trữ đám mây
Lưu trữ đám mây
RulesTestEnvironment.clearStorage() => Promise<void>
Phương pháp này xóa các đối tượng và siêu dữ liệu trong bộ chứa lưu trữ thuộc projectId
được định cấu hình cho trình giả lập Cloud Storage.
RulesTestContext.storage(bucketUrl?: string) => Firebase Storage;
Phương thức này trả về một Phiên bản lưu trữ được định cấu hình để kết nối với trình mô phỏng. Phương thức chấp nhận url gs://
vào Bộ chứa lưu trữ Firebase để thử nghiệm. Nếu được chỉ định, trả về một Phiên bản lưu trữ cho phiên bản mô phỏng của tên bộ chứa.
Chạy thử nghiệm đơn vị cục bộ với SDK JavaScript v8
Chọn một sản phẩm để xem các phương pháp mà SDK thử nghiệm Firebase sử dụng để giao tiếp với trình giả lập.
Cửa hàng lửa trên đám mây
initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp
Phương thức này trả về một ứng dụng Firebase đã khởi tạo tương ứng với ID dự án và biến xác thực được chỉ định trong các tùy chọn. Sử dụng điều 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 các thử nghiệm.
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 đã 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 điều này để tạo một ứng dụng được xác thực là quản trị viên để đặt trạng thái cho các thử nghiệm.
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à thử nghiệm hiện được khởi chạy. Sử dụng tính năng này để dọn dẹp các ứng dụng giữa hoặc sau khi kiểm tra.
Promise.all(firebase.apps().map(app => app.delete()))
loadFirestoreRules({ projectId: string, rules: Object }) => Promise
Phương pháp này gửi các quy tắc đến cơ sở dữ liệu đang chạy cục bộ. Nó nhận một đối tượng chỉ định các quy tắc dưới dạng một chuỗi. Sử dụng phương pháp này để đặt 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 điều này để khẳng định nếu cơ sở dữ liệu đọc hoặc ghi không thành cô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 đầu vào thành công và bị từ chối nếu đầu vào bị từ chối. Sử dụng điều này để khẳng định nếu cơ sở dữ liệu đọc hoặc ghi thành công.
firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
clearFirestoreData({ projectId: string }) => Promise
Phương pháp này xóa tất cả dữ liệu được 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 pháp này để dọn dẹp sau khi kiểm tra.
firebase.clearFirestoreData({ projectId: "my-test-project" });
Cơ sở dữ liệu thời gian thực
Cơ sở dữ liệu thời gian thực
initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp
Sử dụng điều 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 các thử nghiệm.
Trả về ứng dụng firebase đã khởi tạo tương ứng với tên cơ sở dữ liệu và ghi đè biến auth được chỉ định trong tùy chọn.
firebase.initializeTestApp({
databaseName: "my-database",
auth: { uid: "alice" }
});
initializeAdminApp({ databaseName: string }) => FirebaseApp
Sử dụng điều này để tạo một ứng dụng được xác thực là quản trị viên để thiết lập trạng thái cho các thử nghiệm.
Trả về ứng dụng firebase 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 tùy 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 công cụ này để đặt quy tắc cho cơ sở dữ liệu của bạn.
Gửi quy tắc đến cơ sở dữ liệu đang chạy cục bộ. Lấy một đối tượng tùy chọn chỉ định "tên cơ sở dữ liệu" và "quy tắc" 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 quản trị và thử nghiệm hiện được khởi chạy.
Sử dụng công cụ này để dọn sạch các ứng dụng giữa hoặc sau khi kiểm tra (lưu ý rằng các ứng dụng được khởi chạy với trình lắng nghe đang hoạt động sẽ ngăn không cho 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 điều này để khẳng định rằng cơ sở dữ liệu đọc hoặc ghi 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 điều này để khẳng định rằng cơ sở dữ liệu đọc hoặc ghi thành công:
firebase.assertSucceeds(app.database().ref("public").once("value"));
Lưu trữ đám mây
Lưu trữ đám mây
initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp
Sử dụng điều 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 các thử nghiệm.
Trả về ứng dụng firebase đã khởi tạo tương ứng với tên bộ chứa lưu trữ và ghi đè biến xác thực được chỉ định trong tùy chọn.
firebase.initializeTestApp({
storageBucket: "my-bucket",
auth: { uid: "alice" }
});
initializeAdminApp({ storageBucket: string }) => FirebaseApp
Sử dụng điều này để tạo một ứng dụng được xác thực là quản trị viên để thiết lập trạng thái cho các thử nghiệm.
Trả về ứng dụng firebase dành cho quản trị viên đã khởi tạo tương ứng với tên bộ chứa lưu trữ được chỉ định trong tùy chọn. Ứng dụng này bỏ qua các quy tắc bảo mật khi đọc và ghi vào thùng.
firebase.initializeAdminApp({ storageBucket: "my-bucket" });
loadStorageRules({ storageBucket: string, rules: Object }) => Promise
Sử dụng công cụ này để đặt quy tắc cho bộ chứa lưu trữ của bạn.
Gửi quy tắc đến bộ chứa lưu trữ được quản lý cục bộ. Lấy một đối tượng tùy chọn chỉ định "StorageBucket" và "quy tắc" của bạn 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ả các ứng dụng quản trị và thử nghiệm hiện được khởi chạy.
Sử dụng công cụ này để dọn sạch các ứng dụng giữa hoặc sau khi kiểm tra (lưu ý rằng các ứng dụng được khởi chạy với trình lắng nghe đang hoạt động sẽ ngăn không cho 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 điều này để xác nhận rằng bộ chứa lưu trữ đã đọc hoặc ghi 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 điều này để khẳng định rằng bộ chứa lưu trữ đã đọc hoặc ghi thành công:
firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());
API thư viện RUT cho JS SDK v8
Chọn một sản phẩm để xem các phương pháp mà SDK thử nghiệm Firebase sử dụng để giao tiếp với trình giả lập.
Cửa hàng lửa trên đám mây
Cửa hàng lửa trên đám mây
initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp
Phương thức này trả về một ứng dụng Firebase đã khởi tạo tương ứng với ID dự án và biến xác thực được chỉ định trong các tùy chọn. Sử dụng điều 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 các thử nghiệm.
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 đã 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 điều này để tạo một ứng dụng được xác thực là quản trị viên để đặt trạng thái cho các thử nghiệm.
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à thử nghiệm hiện được khởi chạy. Sử dụng tính năng này để dọn dẹp các ứng dụng giữa hoặc sau khi kiểm tra.
Promise.all(firebase.apps().map(app => app.delete()))
loadFirestoreRules({ projectId: string, rules: Object }) => Promise
Phương pháp này gửi các quy tắc đến cơ sở dữ liệu đang chạy cục bộ. Nó nhận một đối tượng chỉ định các quy tắc dưới dạng một chuỗi. Sử dụng phương pháp này để đặt 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 điều này để khẳng định nếu cơ sở dữ liệu đọc hoặc ghi không thành cô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 đầu vào thành công và bị từ chối nếu đầu vào bị từ chối. Sử dụng điều này để khẳng định nếu cơ sở dữ liệu đọc hoặc ghi thành công.
firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
clearFirestoreData({ projectId: string }) => Promise
Phương pháp này xóa tất cả dữ liệu được 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 pháp này để dọn dẹp sau khi kiểm tra.
firebase.clearFirestoreData({ projectId: "my-test-project" });
Cơ sở dữ liệu thời gian thực
Cơ sở dữ liệu thời gian thực
initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp
Sử dụng điều 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 các thử nghiệm.
Trả về ứng dụng firebase đã khởi tạo tương ứng với tên cơ sở dữ liệu và ghi đè biến auth được chỉ định trong tùy chọn.
firebase.initializeTestApp({
databaseName: "my-database",
auth: { uid: "alice" }
});
initializeAdminApp({ databaseName: string }) => FirebaseApp
Sử dụng điều này để tạo một ứng dụng được xác thực là quản trị viên để thiết lập trạng thái cho các thử nghiệm.
Trả về ứng dụng firebase 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 tùy 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 công cụ này để đặt quy tắc cho cơ sở dữ liệu của bạn.
Gửi quy tắc đến cơ sở dữ liệu đang chạy cục bộ. Lấy một đối tượng tùy chọn chỉ định "tên cơ sở dữ liệu" và "quy tắc" 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 quản trị và thử nghiệm hiện được khởi chạy.
Sử dụng công cụ này để dọn sạch các ứng dụng giữa hoặc sau khi kiểm tra (lưu ý rằng các ứng dụng được khởi chạy với trình lắng nghe đang hoạt động sẽ ngăn không cho 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 điều này để khẳng định rằng cơ sở dữ liệu đọc hoặc ghi 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 điều này để khẳng định rằng cơ sở dữ liệu đọc hoặc ghi thành công:
firebase.assertSucceeds(app.database().ref("public").once("value"));
Lưu trữ đám mây
Lưu trữ đám mây
initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp
Sử dụng điều 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 các thử nghiệm.
Trả về ứng dụng firebase đã khởi tạo tương ứng với tên bộ chứa lưu trữ và ghi đè biến xác thực được chỉ định trong tùy chọn.
firebase.initializeTestApp({
storageBucket: "my-bucket",
auth: { uid: "alice" }
});
initializeAdminApp({ storageBucket: string }) => FirebaseApp
Sử dụng điều này để tạo một ứng dụng được xác thực là quản trị viên để thiết lập trạng thái cho các thử nghiệm.
Trả về ứng dụng firebase dành cho quản trị viên đã khởi tạo tương ứng với tên bộ chứa lưu trữ được chỉ định trong tùy chọn. Ứng dụng này bỏ qua các quy tắc bảo mật khi đọc và ghi vào thùng.
firebase.initializeAdminApp({ storageBucket: "my-bucket" });
loadStorageRules({ storageBucket: string, rules: Object }) => Promise
Sử dụng công cụ này để đặt quy tắc cho bộ chứa lưu trữ của bạn.
Gửi quy tắc đến bộ chứa lưu trữ được quản lý cục bộ. Lấy một đối tượng tùy chọn chỉ định "StorageBucket" và "quy tắc" của bạn 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ả các ứng dụng quản trị và thử nghiệm hiện được khởi tạo.
Sử dụng công cụ này để dọn sạch các ứng dụng giữa hoặc sau khi kiểm tra (lưu ý rằng các ứng dụng được khởi chạy với trình lắng nghe đang hoạt động sẽ ngăn không cho 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 điều này để xác nhận rằng bộ chứa lưu trữ đã đọc hoặc ghi 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 điều này để xác nhận rằng bộ chứa lưu trữ đã đọc hoặc ghi thành công:
firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());