Xây dựng các bài kiểm tra đơn vị

Bộ mô phỏng cục bộ của Firebase giúp việc xác thực đầy đủ các tính năng và hành vi của ứng dụng của bạn trở nê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 mô phỏng Firebase để chạy và tự động hóa các bài kiểm tra đơ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:

  • Trình mô phỏng ban đầu sẽ tải các quy tắc được chỉ định trong trường firestore.rules hoặc 'storage.rules' của tệp firebase.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 loadFirestoreRules hoặc 'loadStorageRules' như được mô tả bên dưới, trình giả lập 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 mới hỗ trợ mocking auth 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 Firebase Auth sản xuất được cung cấp thông qua SDK khách hàng và đánh giá các quy tắc cho phù hợp, cho phép kết nối ứng dụng của bạn trực tiếp với trình giả lập trong quá trình tích hợp và kiểm tra 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 cá thể 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 quản trị viên sẽ không thể đọc hoặc ghi.
  • Mỗi cơ sở dữ liệu được 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, điều này giới hạn mỗi trường hợp ở 100 kết nối đồng thời).
  • Bất kỳ cơ sở dữ liệu nào cũng sẽ chấp nhận chuỗi "owner" làm mã thông báo xác thực quản trị viên.
  • Trình giả lập hiện không có tương tác hoạt động với các sản phẩm Firebase khác. Đáng chú ý, quy trình Xác thực Firebase bình 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ện rules-unit-testing , sử dụng trường auth . Đố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 dưới dạng bất kỳ thực thể nào bạn cung cấp. Nếu bạn chuyển bằng null , 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ắc auth != 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 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 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 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ủa nó. Các API thư viện khác nhau đáng kể. Chúng tôi đề xuất thư viện thử nghiệm v9, đượ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. Để có 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 .

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ỹ xem trình giả lập có đang 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 gần đây của Node.js để bạn có thể sử dụng ký hiệu async/await . Hầu như tất cả các hành vi 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 Promise.

Thư viện Kiểm tra Đơn vị Quy tắc v9 luôn biết các 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à cấu hình một RulesTestEnvironment bằng lệnh gọi initializeTestEnvironment tạoTestEn Môi trường.
  • Thiết lập dữ liệu thử nghiệm mà không kích hoạt Quy tắc, sử dụng một 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 tra và mỗi bài kiểm tra trước / sau kết nối với các lệnh gọi để dọn dẹp dữ liệu kiểm tra và môi trường, như RulesTestEnvironment.cleanup() hoặc RulesTestEnvironment.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 RulesTestEnvironment.authenticatedContextRulesTestEnvironment.unauthenticatedContext .

Các phương pháp phổ biến và các chức năng tiện ích

Ngoài ra, hãy xem các phương pháp kiểm tra dành riêng cho trình mô phỏng trong SDK v9 .

initializeTestEnvironment() => RulesTestEnvironment

Chức năng 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 trước để thiết lập thử nghiệm. Việc thực thi 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 ra 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 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 ra một RulesTestContext , hoạt động giống như một ứng dụng khách không được đă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 có mã thông báo Firebase Auth được đính kèm.

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ị vô hiệu hóa.

Phương thức này sử dụng một hàm gọi lại, hàm này nhận bối cảnh Bảo mật-Quy tắc-bỏ qua và trả về một lời hứa. Bối cảnh sẽ bị hủy sau khi lời hứa được giải quyết / từ chối.

RulesTestEnvironment.cleanup()

Phương pháp này phá hủy tất cả các RulesTestContexts được tạo trong môi trường thử nghiệm và dọn dẹp các tài nguyên bên dưới, 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 dữ liệu rõ ràng dành riêng cho trình mô phỏng ứ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 xác nhận rằng Promise được cung cấp gói 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'), { ... });

Các 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 kiểm tra phổ biến và các chức năng tiện ích trong SDK v9 .

Cloud Firestore

Cloud Firestore

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 định cấu hình cho trình giả lập Firestore.

RulesTestContext.firestore(settings?: Firestore.FirestoreSettings) => Firestore;

Phương thức này nhận 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 trả về có thể được sử dụng với các API SDK ứng dụng khách (v9 mô-đun hoặc v9 compat).

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 đị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 một 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 trả về có thể được sử dụng với các API SDK ứng dụng khách (v9 mô-đun hoặc v9 compat). 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 không gian tên được mô phỏng 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 các nhóm lưu trữ thuộc projectId đị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 Storage được cấu hình để kết nối với trình giả lập. Phương thức chấp nhận một gs:// url vào Nhóm lưu trữ Firebase để thử nghiệm. Nếu được chỉ định, trả về một phiên bản Storage cho một phiên bản giả lập của tên nhóm.

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 được SDK kiểm tra 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 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 với tư cách 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ề ứng dụng Firebase 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 quyền 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 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 tạo. Sử dụng công cụ này để dọn dẹp ứ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 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ộ. Nó nhận một đối tượng xác định các quy tắc dưới dạng một chuỗi. Sử dụng phương pháp này để thiết lập 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 điều này để xác nhận nếu một 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 sẽ 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 nếu một 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 thức này xóa tất cả dữ liệu liên quan đến 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 để làm sạch 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 với tư cách 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 các tùy chọn.

firebase.initializeTestApp({
  databaseName: "my-database",
  auth: { uid: "alice" }
});

initializeAdminApp({ databaseName: string }) => FirebaseApp

Sử dụng quyền này để tạo ứng dụng được xác thực với tư cách 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ị đã khởi tạo tương ứng với tên cơ sở dữ liệu được chỉ định trong các 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 điều này để thiết lập 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 tùy chọn chỉ định "databaseName" 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 tạo.

Sử dụng công cụ này để dọn dẹp ứng dụng giữa hoặc sau khi kiểm tra (lưu ý rằng các ứng dụng được khởi tạo với trình xử lý đang hoạt động 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 điều này để khẳng định rằng một 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 một 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 với tư cách 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ộ lưu trữ và ghi đè biến xác thực được chỉ định trong các tùy chọn.

firebase.initializeTestApp({
  storageBucket: "my-bucket",
  auth: { uid: "alice" }
});

initializeAdminApp({ storageBucket: string }) => FirebaseApp

Sử dụng quyền này để tạo ứng dụng được xác thực với tư cách 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ị đã khởi tạo tương ứng với tên nhóm lưu trữ được chỉ định trong các 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 điều này để thiết lập các quy tắc của nhóm lưu trữ của bạn.

Gửi các quy tắc tới nhóm 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 dẹp ứng dụng giữa hoặc sau khi kiểm tra (lưu ý rằng các ứng dụng được khởi tạo với trình xử lý đang hoạt động 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 điều này để khẳng định rằng một bộ chứa lưu trữ không thể đọc hoặc ghi:

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 một 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 được SDK kiểm tra 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 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 với tư cách 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ề ứng dụng Firebase 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 quyền 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 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 tạo. Sử dụng công cụ này để dọn dẹp ứ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 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ộ. Nó nhận một đối tượng xác định các quy tắc dưới dạng một chuỗi. Sử dụng phương pháp này để thiết lập 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 điều này để xác nhận nếu một 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 sẽ 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 nếu một 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 thức này xóa tất cả dữ liệu liên quan đến 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 để làm sạch 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 với tư cách 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 các tùy chọn.

firebase.initializeTestApp({
  databaseName: "my-database",
  auth: { uid: "alice" }
});

initializeAdminApp({ databaseName: string }) => FirebaseApp

Sử dụng quyền này để tạo ứng dụng được xác thực với tư cách 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ị đã khởi tạo tương ứng với tên cơ sở dữ liệu được chỉ định trong các 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 điều này để thiết lập 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 tùy chọn chỉ định "databaseName" 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 tạo.

Sử dụng công cụ này để dọn dẹp ứng dụng giữa hoặc sau khi kiểm tra (lưu ý rằng các ứng dụng được khởi tạo với trình xử lý đang hoạt động 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 điều này để khẳng định rằng một 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 một 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 với tư cách 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ộ lưu trữ và ghi đè biến xác thực được chỉ định trong các tùy chọn.

firebase.initializeTestApp({
  storageBucket: "my-bucket",
  auth: { uid: "alice" }
});

initializeAdminApp({ storageBucket: string }) => FirebaseApp

Sử dụng quyền này để tạo ứng dụng được xác thực với tư cách 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ị đã khởi tạo tương ứng với tên nhóm lưu trữ được chỉ định trong các 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 điều này để thiết lập các quy tắc của nhóm lưu trữ của bạn.

Gửi các quy tắc tới nhóm 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 dẹp ứng dụng giữa hoặc sau khi kiểm tra (lưu ý rằng các ứng dụng được khởi tạo với trình xử lý đang hoạt động 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 điều này để khẳng định rằng một bộ chứa lưu trữ không thể đọc hoặc ghi:

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 một bộ chứa lưu trữ đọc hoặc ghi thành công:

firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());