Xây dựng bài kiểm thử đơn vị

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. Ngoài ra một công cụ tuyệt vời để 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á kiểm thử đơ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 ích cho bạn khi bạn xây dựng và tự động hoá quy trình kiểm thử đơn vị cho ứng dụng để xác thực Rules của bạn.

Thiết lập Trình mô phỏng Firebase nếu bạn chưa làm.

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 firestore.rules hoặc "storage.rules" của tệp firebase.json. Nếu tệp không tồn tại và bạn không sử dụng loadFirestoreRules hoặc "loadStorageRules" phương thức như mô tả dưới đây, trình mô phỏng sẽ coi tất cả dự án là có các quy tắc mở.
  • Trong khi hầu hết các SDK Firebase làm việc trực tiếp với trình mô phỏng, thì chỉ thư viện @firebase/rules-unit-testing mới hỗ trợ mô phỏng auth trong 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 như xoá tất cả dữ liệu, như được liệt kê bên dưới.
  • Trình mô phỏng cũng sẽ chấp nhận mã thông báo xác thực Firebase chính thức được cung cấp thông qua SDK ứng dụng và đánh giá các quy tắc sao cho phù hợp, từ đó cho phép kết nối ứng dụng của bạn trực tiếp đến 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à phiên bản chính thức

  • 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 được bắt đầu bằng các quy tắc đóng, do đó, người dùng không phải là quản trị viên sẽ không có thể đọc hoặc ghi.
  • Mỗi cơ sở dữ liệu được mô phỏng sẽ áp dụng gói Spark (đáng chú ý nhất là việc này giới hạn mỗi thực thể ở mức 100 thực thể đồng thời kết nối).
  • Mọi cơ sở dữ liệu đều chấp nhận chuỗi "owner" làm mã thông báo xác thực quản trị.
  • Trình mô phỏng hiện không có lượt tương tác nào với Firebase khác của Google dành cho doanh nghiệp. Đáng chú ý là 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 rules-unit-testing Thư viện, lấy trường auth. Đối tượng Firebase được tạo bằng cách sử dụng hoạt động như thể nó đã được xác thực thành công là bất kỳ mà bạn cung cấp. Nếu bạn truyền vào null, thì giá trị này 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 mô phỏng Realtime Database

Bạn có thể truy cập vào một phiên bản Firebase Realtime Database chính thức ở miền con của firebaseio.com và bạn có thể truy cập vào api REST như sau:

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

Trình mô phỏng này chạy trên máy và có tại localhost:9000. Để tương tác với một thực thể cụ thể của cơ sở dữ liệu, 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ộ với SDK JavaScript phiên bản 9

Firebase phân phối một thư viện kiểm thử đơn vị Quy tắc bảo mật kèm theo cả hai phiên bản 9 SDK JavaScript và SDK phiên bản 8 của SDK đó. API thư viện đóng vai trò quan trọng khác. Bạn nên sử dụng thư viện kiểm thử v9, thư viện này được tinh giản hơn và yêu cầu ít thiết lập hơn để kết nối với trình mô phỏng, nhờ đó tránh được việc vô tình sử dụng 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 thư viện kiểm thử phiên bản 8 có sẵn.

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 thấy hết thời gian chờ hoặc gặp lỗi ECONNREFUSED, hãy kiểm tra kỹ trình mô phỏng đang thực sự chạy.

Bạn nên sử dụng phiên bản Node.js gần đây để có thể sử dụng Ký hiệu async/await. Hầu như tất cả các hành vi bạn có thể muốn kiểm tra bao gồm các chức năng không đồng bộ và mô-đun kiểm thử được thiết kế để hoạt động Mã dựa trên lời hứa.

Thư viện Kiểm thử đơn vị quy tắc v9 luôn nhận biết được trình mô phỏng và không bao giờ tác động đến nguồn lực sản xuất.

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
} from "@firebase/rules-unit-testing"

// Use `const { … } = require("@firebase/rules-unit-testing")` if imports are not supported
// Or we suggest `const testing = require("@firebase/rules-unit-testing")` if necessary.

Sau khi nhập, việc triển khai kiểm thử đơn vị bao gồm:

  • Tạo và định cấu hình RulesTestEnvironment bằng lệnh gọi đến initializeTestEnvironment.
  • Thiết lập dữ liệu kiểm thử mà không kích hoạt Rules, sử dụng một phương thức thuận tiện cho phép bạn tạm thời bỏ qua các dữ liệu đó, RulesTestEnvironment.withSecurityRulesDisabled.
  • Thiết lập bộ thử nghiệm và mỗi lần kiểm thử trước/sau khi kết nối với các lệnh gọi đến dọn dẹp dữ liệu và môi trường thử nghiệm, chẳng hạn như RulesTestEnvironment.cleanup() hoặc RulesTestEnvironment.clearFirestore().
  • Triển khai các trường hợp kiểm thử bắt chước trạng thái xác thực bằng cách sử dụng RulesTestEnvironment.authenticatedContextRulesTestEnvironment.unauthenticatedContext.

Các phương thức và hàm hiệu dụng phổ biến

Xem thêm phương pháp kiểm thử dành riêng cho trình mô phỏng 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. Gọi sự kiện này đầu tiên để thiết lập thử nghiệm. Quá trình thực thi thành công đòi hỏi trình mô phỏng phải đang chạy.

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ã xác thực Người dùng Authentication. Các yêu cầu được tạo thông qua ngữ cảnh được trả về sẽ có một mã thông báo Authentication mô phỏng được đính kèm. Bạn có thể chuyển một đối tượng xác định các thông báo xác nhận quyền sở hữu tuỳ chỉnh hoặc ghi đè các 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 chương trình kiểm thử của bạn để truy cập vào bất kỳ trình mô phỏng nào các thực thể được định cấu hình, bao gồm cả những thực thể được định cấu hình bằng initializeTestEnvironment.

// Assuming a Firestore app and the Firestore emulator for this example
import { setDoc } from "firebase/firestore";

const alice = testEnv.authenticatedContext("alice", {  });
// Use the Firestore instance associated with this context
await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });

RulesTestEnvironment.unauthenticatedContext() => RulesTestContext

Phương thức này tạo ra một RulesTestContext, hoạt động như một ứng dụng khách chưa đăng nhập qua Authentication. Các yêu cầu được tạo thông qua ngữ cảnh trả về sẽ không đính kèm mã thông báo xác thực Firebase.

Sử dụng đối tượng ngữ cảnh kiểm thử được trả về trong các chương trình kiểm thử để truy cập vào mọi thực thể trình mô phỏng đã định cấu hình, bao gồm cả các 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 hàm thiết lập thử nghiệm trong ngữ cảnh hoạt động như thể Quy tắc bảo mật tắt.

Phương thức này sử dụng hàm callback, hàm này sẽ bỏ qua Security-Rules bối cảnh và trả về một lời hứa. Bối cảnh sẽ bị huỷ sau khi lời hứa giải quyết / từ chối.

RulesTestEnvironment.cleanup()

Phương thức này huỷ bỏ 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 sạch.

Phương thức này không thay đổi trạng thái của trình mô phỏng theo bất kỳ cách nào. Cách đặt lại dữ liệu giữa các lần kiểm thử, hãy sử dụng phương thức xoá dữ liệu dành riêng cho trình mô phỏng ứng dụng.

assertSucceeds(pr: Promise<any>)) => Promise<any>

Đây là một hàm hiệu dụng trường hợp kiểm thử.

Hàm này xác nhận rằng Promise đã cung cấp sẽ gói một thao tác của trình mô phỏng sẽ được giải quyết mà không có vi phạm Quy tắc bảo mật nào.

await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });

assertFails(pr: Promise<any>)) => Promise<any>

Đây là một hàm hiệu dụng trường hợp kiểm thử.

Hàm này xác nhận rằng Promise đã cung cấp sẽ gói một thao tác của 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'), { ... });

Phương thức dành riêng cho trình mô phỏng

Xem thêm các phương pháp kiểm thử phổ biến và hàm hiệu dụng sử dụng API 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 về Đã định cấu hình projectId cho trình mô phỏng Firestore.

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

Phương thức này nhận một thực thể Firestore cho ngữ cảnh kiểm thử này. Bạn có thể sử dụng thực thể SDK ứng dụng JS Firebase được trả về với các API SDK ứng dụng (mô-đun v9 hoặc tương thích v9).

Realtime Database

Realtime Database

RulesTestEnvironment.clearDatabase() => Promise<void>

Phương thức này sẽ xoá dữ liệu trong Realtime Database thuộc về Đã định cấu hình projectId 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. JS Firebase được trả về Bạn có thể sử dụng phiên bản SDK ứng dụng với các API SDK ứng dụng (mô-đun hoặc không gian tên, phiên bản 9 trở lên). Phương thức này chấp nhận URL của Báo cáo theo thời gian thực Thực thể của cơ sở dữ liệu. Nếu được chỉ định, phương thức này sẽ trả về một phiên bản của phiên bản được 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 sẽ xoá các đối tượng và siêu dữ liệu trong bộ chứa lưu trữ thuộc Đã định cấu hình projectId cho trình mô phỏng Cloud Storage.

RulesTestContext.storage(bucketUrl?: string) => Firebase Storage;

Phương thức này trả về một phiên bản Storage đã đị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 URL gs:// vào Bộ chứa bộ nhớ Firebase để kiểm thử. Nếu đã chỉ định, sẽ trả về một phiên bản Bộ nhớ cho phiên bản được mô phỏng của tên bộ chứa.

Chạy kiểm thử đơn vị cục bộ với SDK JavaScript phiên bản 8

Chọn một sản phẩm để xem các phương thức mà SDK Kiểm thử 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 chạy tương ứng với mã dự án và biến xác thực được chỉ định trong các tuỳ chọn. Dùng nút này để tạo ứng dụng được xác thực là 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ị đã khởi tạo. Ứng dụng này bỏ qua các quy tắc bảo mật khi thực hiện thao tác đọc và ghi. Sử dụng thông tin này để tạo một ứng dụng được xác thực là quản trị viên nhằm đặt trạng thái cho các bài kiểm thử.

firebase.initializeAdminApp({ projectId: "my-test-project" });
    

apps() => [FirebaseApp] Phương thức này trả về tất cả ứng dụng quản trị và ứng dụng thử nghiệm hiện đã khởi tạo. Hãy sử dụng công cụ này để dọn dẹp ứng dụng giữa hoặc sau các thử nghiệm.

Promise.all(firebase.apps().map(app => app.delete()))

loadFirestoreRules({ projectId: string, rules: Object }) => Promise

Phương thức này sẽ gửi các quy tắc đến một cơ sở dữ liệu đang chạy cục bộ. Phải lấy một đối tượng chỉ định quy tắc dưới dạng chuỗi. Sử dụng phương pháp 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 dữ liệu đầu vào thành công hoặc lời hứa thành công 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 một hoạt động đọc hoặc ghi cơ sở dữ liệu có thành công 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 việc 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 sẽ xoá tất cả dữ liệu liên quan đến một dự án cụ thể trong chạy cục bộ bản sao Firestore. Hãy sử dụng phương thức này để làm sạch dữ liệu sau khi kiểm thử.

firebase.clearFirestoreData({
  projectId: "my-test-project"
});
   

Realtime Database

Realtime Database

initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp

Sử dụng dữ liệ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 bài kiểm thử.

Trả về ứng dụng Firebase đã khởi tạo tương ứng với tên và thông tin xác thực của cơ sở dữ liệu ghi đè biến được chỉ định trong các lựa chọn.

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

Sử dụng hàm này để tạo một ứng dụng được xác thực là quản trị viên nhằm thiết lập trạng thái cho kiểm thử.

Trả về một ứng dụng firebase quản trị được khởi tạo tương ứng với tên cơ sở dữ liệu đượ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 cơ sở dữ liệu.

firebase.initializeAdminApp({ databaseName: "my-database" });

loadDatabaseRules({ databaseName: string, rules: Object }) => Promise

Dùng hàm này để đặt các 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 tuỳ chọn chỉ định "databaseName" của bạn 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ả ứng dụng quản trị và ứng dụng kiểm thử hiện đã khởi tạo.

Sử dụng mã này để dọn dẹp ứng dụng giữa hoặc sau khi kiểm thử (lưu ý rằng các ứng dụng đã khởi chạy với 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ề lời hứa bị từ chối nếu dữ liệu đầu vào thành công và thành công nếu thông tin đầu vào bị từ chối.

Dùng phương thức này để xác nhận rằng một cơ sở dữ liệu không thể đọc hoặc ghi:

firebase.assertFails(app.database().ref("secret").once("value"));

assertSucceeds(pr: Promise) => Promise

Trả về 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.

Dùng phương thức này để xác nhận rằng cơ sở dữ liệu đã đọc hoặc ghi 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 thông tin 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 kiểm thử.

Trả về một ứng dụng firebase đã khởi chạy tương ứng với tên bộ chứa bộ nhớ và 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 thông tin này để tạo một ứng dụng được xác thực là quản trị viên nhằm thiết lập trạng thái cho các bài kiểm thử.

Trả về ứng dụng quản trị Firebase đã khởi tạo tương ứng với bộ chứa lưu trữ tên đượ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 bộ chứa.

firebase.initializeAdminApp({ storageBucket: "my-bucket" });

loadStorageRules({ storageBucket: string, rules: Object }) => Promise

Dùng lựa chọn này để đặt các 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 tuỳ chọn chỉ định "storageBucket" của bạn 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ả ứng dụng quản trị và ứng dụng kiểm thử hiện đã khởi tạo.

Sử dụng mã này để dọn dẹp ứng dụng giữa hoặc sau khi kiểm thử (lưu ý rằng các ứng dụng đã khởi chạy với 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ề lời hứa bị từ chối nếu dữ liệu đầu vào thành công và thành công nếu thông tin đầu vào bị từ chối.

Dùng thông tin này để xác nhận rằng không thể đọc hoặc ghi một bộ chứa lưu trữ:

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 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.

Dùng phương thức 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());

API thư viện RUT cho SDK JS phiên bản 8

Chọn một sản phẩm để xem các phương thức mà SDK thử nghiệm Firebase sử dụng cho giao diện 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 xác thực được chỉ định trong các tuỳ chọn. Dùng nút này để tạo ứng dụng được xác thực là 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ị đã khởi tạo. Ứng dụng này bỏ qua các quy tắc bảo mật khi thực hiện thao tác đọc và ghi. Sử dụng thông tin này để tạo một ứng dụng được xác thực là quản trị viên nhằm đặt trạng thái cho các bài kiểm thử.

firebase.initializeAdminApp({ projectId: "my-test-project" });
    

apps() => [FirebaseApp] Phương thức này trả về tất cả ứng dụng quản trị và ứng dụng thử nghiệm hiện đã khởi tạo. Hãy sử dụng công cụ này để dọn dẹp ứng dụng giữa hoặc sau các thử nghiệm.

Promise.all(firebase.apps().map(app => app.delete()))

loadFirestoreRules({ projectId: string, rules: Object }) => Promise

Phương thức này sẽ gửi các quy tắc đến một cơ sở dữ liệu đang chạy cục bộ. Phải lấy một đối tượng chỉ định quy tắc dưới dạng chuỗi. Sử dụng phương pháp 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 dữ liệu đầu vào thành công hoặc lời hứa thành công 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 một hoạt động đọc hoặc ghi cơ sở dữ liệu có thành công 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 việc 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 sẽ xoá tất cả dữ liệu liên quan đến một dự án cụ thể trong chạy cục bộ bản sao Firestore. Hãy sử dụng phương thức này để làm sạch dữ liệu sau khi kiểm thử.

firebase.clearFirestoreData({
  projectId: "my-test-project"
});
   

Realtime Database

Realtime Database

initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp

Sử dụng dữ liệ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 bài kiểm thử.

Trả về ứng dụng Firebase đã khởi tạo tương ứng với tên và thông tin xác thực của cơ sở dữ liệu ghi đè biến được chỉ định trong các lựa chọn.

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

Sử dụng hàm này để tạo một ứng dụng được xác thực là quản trị viên nhằm thiết lập trạng thái cho kiểm thử.

Trả về một ứng dụng firebase quản trị được khởi tạo tương ứng với tên cơ sở dữ liệu đượ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 cơ sở dữ liệu.

firebase.initializeAdminApp({ databaseName: "my-database" });

loadDatabaseRules({ databaseName: string, rules: Object }) => Promise

Dùng hàm này để đặt các 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 tuỳ chọn chỉ định "databaseName" của bạn 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ả ứng dụng quản trị và ứng dụng kiểm thử hiện đã khởi tạo.

Sử dụng mã này để dọn dẹp ứng dụng giữa hoặc sau khi kiểm thử (lưu ý rằng các ứng dụng đã khởi chạy với 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ề lời hứa bị từ chối nếu dữ liệu đầu vào thành công và thành công nếu thông tin đầu vào bị từ chối.

Dùng phương thức này để xác nhận rằng một cơ sở dữ liệu không thể đọc hoặc ghi:

firebase.assertFails(app.database().ref("secret").once("value"));

assertSucceeds(pr: Promise) => Promise

Trả về 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.

Dùng phương thức này để xác nhận rằng cơ sở dữ liệu đã đọc hoặc ghi 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 thông tin 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 kiểm thử.

Trả về một ứng dụng firebase đã khởi chạy tương ứng với tên bộ chứa bộ nhớ và 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 thông tin này để tạo một ứng dụng được xác thực là quản trị viên nhằm thiết lập trạng thái cho các bài kiểm thử.

Trả về ứng dụng quản trị Firebase đã khởi tạo tương ứng với bộ chứa lưu trữ tên đượ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 bộ chứa.

firebase.initializeAdminApp({ storageBucket: "my-bucket" });

loadStorageRules({ storageBucket: string, rules: Object }) => Promise

Dùng lựa chọn này để đặt các 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 tuỳ chọn chỉ định "storageBucket" của bạn 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ả ứng dụng quản trị và ứng dụng kiểm thử hiện đã khởi tạo.

Sử dụng mã này để dọn dẹp ứng dụng giữa hoặc sau khi kiểm thử (lưu ý rằng các ứng dụng đã khởi chạy với 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ề lời hứa bị từ chối nếu dữ liệu đầu vào thành công và thành công nếu thông tin đầu vào bị từ chối.

Dùng thông tin này để xác nhận rằng không thể đọc hoặc ghi một bộ chứa lưu trữ:

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 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.

Dùng phương thức 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());