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

Các căn cứ hỏa lực địa phương Emulator Suite làm cho nó dễ dàng hơn để xác nhận đầy đủ của ứng dụng của bạn tính năng và hành vi . Đâ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 sẵn sàng, thiết lập các căn cứ hỏa lực Emulators .

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:

  • Các giả lập ban đầu sẽ được tải các quy tắc quy định trong firestore.rules hoặc trường 'storage.rules' của bạn firebase.json tập tin. Nếu tập tin không tồn tại và bạn không sử dụng các loadFirestoreRules hoặc phương pháp 'loadStorageRules' như mô tả dưới đây, xử lý giả lập tất cả các dự án là có quy tắc mở.
  • Trong khi hầu hết các căn cứ hỏa lực SDK làm việc với các giả lập trực tiếp, chỉ có @firebase/rules-unit-testing hỗ trợ thư viện chế giễu auth trong Quy định an toàn, làm các xét nghiệm đơ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 ứng dụng khách 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 mô phỏng áp dụng kế hoạch Spark giới hạn và hạn ngạch (đáng chú ý nhất, giới hạn này mỗi trường hợp đến 100 kết nối đồng thời).
  • Bất kỳ cơ sở dữ liệu sẽ chấp nhận chuỗi "owner" như một admin auth token.
  • 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 initializeTestApp() phương pháp trong các rules-unit-testing thư viện, trong đó có một auth lĩnh vực. Đố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 vượt qua trong null , nó sẽ cư xử như một người dùng không được thẩm định ( auth != null quy tắc này sẽ thất bại, ví dụ).

Tương tác với trình giả lập Cơ sở dữ liệu thời gian thực

Một sản căn cứ hỏa lực Realtime Cơ sở dữ liệu Ví dụ có thể truy cập vào tên miền phụ của firebaseio.com , và bạn có thể truy cập vào API REST như thế này:

https://<database_name>.firebaseio.com/path/to/my/data.json

Các giả lập chạy ở địa phương, và có sẵn tại localhost:9000 . Để tương tác với một trường hợp cơ sở dữ liệu cụ thể, bạn sẽ phải sử dụng các ns tham số truy vấn để 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 khuyên bạn nên sử dụng 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. Đối với khả năng tương thích ngược, chúng tôi tiếp tục làm cho các thư viện test v8 sẵn .

Sử dụng @firebase/rules-unit-testing module để tương tác với các giả lập mà chạy cục bộ. Nếu bạn nhận được timeout hoặc ECONNREFUSED lỗi, kiểm tra lại rằng giả lập được thực sự chạy.

Chúng tôi khuyên bạn sử dụng một phiên bản gần đây của Node.js, do đó bạn có thể sử dụng async/await ký hiệu. 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 với một cuộc gọi đến initializeTestEnvironment .
  • Thiết lập dữ liệu thử nghiệm mà không cần kích hoạt Quy định, sử dụng một phương pháp thuận tiện cho phép bạn tạm thời bỏ qua họ, RulesTestEnvironment.withSecurityRulesDisabled .
  • Thiết lập bộ kiểm tra và mỗi bài kiểm tra trước / sau móc với các cuộc gọi đến dọn dẹp dữ liệu thử nghiệm và môi trường, như RulesTestEnvironment.cleanup() hoặc RulesTestEnvironment.clearFirestore() .
  • Thực hiện trường hợp kiểm tra rằng các quốc gia xác thực bắt chước sử dụng RulesTestEnvironment.authenticatedContextRulesTestEnvironment.unauthenticatedContext .

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

Xem thêm các phương pháp thử nghiệm giả lập cụ thể 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.

Chức năng chấp nhận một đối tượng tùy chọn xác định một TestEnvironmentConfig , có thể bao gồm một ID dự án và giả lập các thiết lập cấu hình.

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 pháp này tạo ra một RulesTestContext , mà cư xử như một chứng thực xác thực người dùng. 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 các đối tượng bối cảnh thử nghiệm trở lại trong các thử nghiệm của bạn để truy cập bất kỳ trường hợp giả lập cấu hình, bao gồm cả những 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 pháp này tạo ra một RulesTestContext , mà cư xử như một khách hàng mà 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 các đối tượng bối cảnh thử nghiệm trở lại trong các thử nghiệm của bạn để truy cập bất kỳ trường hợp giả lập cấu hình, bao gồm cả những 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ị phá hủy 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ả RulesTestContexts tạo ra trong môi trường thử nghiệm và dọn dẹp các nguồn lực cơ bản, cho phép một lối ra 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 xác nhận 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

Xem thêm các phương pháp thử nghiệm chung và 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 rằng thuộc về projectId cấu hình cho giả lập FireStore.

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

Phương thức này nhận được 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 mà thuộc về projectId cấu hình cho cơ sở dữ liệu giả lập Realtime.

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 thùng lưu trữ thuộc projectId cấu hình cho 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 pháp này chấp nhận một gs:// url vào căn cứ hỏa lực lưu trữ Bucket để 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 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 pháp này trả về tất cả các bài kiểm tra và quản trị ứng dụng hiện 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 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 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 một ứ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 để xóa 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 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 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 một ứ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ị viên đã 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 đến 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 để xóa 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 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 pháp này trả về tất cả các bài kiểm tra và quản trị ứng dụng hiện 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 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 đượ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 để 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 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 một ứ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 để xóa 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 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 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 một ứ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ị viên đã 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 đến 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 để xóa 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 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());